程序猿大战Python——面向对象——魔法方法

什么是魔法方法?

==目标:==了解什么是魔法方法?

魔法方法指的是:可以给Python类增加魔力的特殊方法。有两个特点:

(1)总是被双下划线所包围;

(2)在特殊时刻会被自动调用,不需要开发者手动去调用。

魔法方法语法:

__魔法方法名__()

在Python中,常用的魔法方法有:

魔法方法名描述信息
__init__(self [, ...])构造器,当一个对象被初始化创建时,会被自动调用。
__str__(self)输出对象名时,若不想直接输出内存地址值,可重写str()方法。
__del__(self)当一个对象被删除或销毁时,会被自动调用。

==总结:==

(1)魔法方法的前后,总是被()包围着;==A、双下划线==;B、单下划线;

(2)注意:魔法方法会在某些特殊时刻被自动调用。

无参__init__()方法

==目标:==掌握无参__init__()方法的使用。

在Python中,当新创建一个对象时,则会自动触发__init__()魔法方法。

魔法方法名描述信息
__init__(self [, ...])构造器,当一个对象被初始化创建时,会被自动调用。

根据是否给__init__()魔法方法传递参数值,可分为:

(1)无参__init__()方法

(2)有参__init__()方法

无参__init__()方法语法:

class 类名:
    def __init__(self):
        代码
        ...

说明:当仅需在类内部使用与初始化属性时,可以使用该方法。

例如,一起来完成:

(1)给小轿车这个对象默认设置颜色和轮胎数为:黑色、3个轮胎;

(2)创建对象后,直接获取属性结果。

# 定义Student类
# class Student:
#     def __init__(self):
#         print("执行了init...")
​
# init
# 创建对象
# stu = Student()  # 创建对象时,会自动调用Init方法
# stu.__init__()
​
# 1.定义类: 默认设置属性
class MyCar:
    def __init__(self):
        # 默认设定
        self.color = "黑色"
        self.number = 3
​
    def func(self):
        print("============================")
        print(f"颜色:{self.color}")
        print(f"轮胎数:{self.number}")
        print("============================")
​
# 2.在类的外部访问属性
my_car = MyCar()
# print(my_car.color)
# print(my_car.number)
​
# 3.类内部访问属性
my_car.func()

==总结:==

(1)当创建对象时,会()执行__init__()方法;A、自动调用;B、不调用;

(2)注意:建议自定义的类中,有一个__init__()魔法方法。

==休息一下,15:40继续上课。==

有参__init__()方法

==目标:==掌握有参__init__()方法的使用。

当想要在创建对象时,就设定属性值时,可以使用有参__init__()方法。语法:

class 类名:
    def __init__(self, 参数1, 参数2,...):
        代码
        ...

说明:

(1)不需要给self传递参数值;

(2)传递参数个数的计算公式为【传递参数个数 = 定义方法后的参数总个数 - 1】。

例如,一起来完成:

(1)直接在创建车对象时,初始化设定颜色、轮胎数值;

(2)在类外部直接获取对象属性值。

# 1.定义类、方法
class Car:
    def __init__(self,color,number):   # 属性名会与传递的参数名名称保持一致
        self.color = color
        self.number = number
​
​
# 2.创建对象
car = Car("黑色",4)
# 3.获取值
print(f"颜色:{car.color}")
print(f"轮胎个数:{car.number}")

==总结:==

(1)__init__()方法可以用来设置属性的默认值;

(2)注意:当要在创建对象时,直接设定属性值,则可以通过有参__init__()方法传递参数值来处理。

__str__()方法

==目标:==掌握__str__()方法的使用。

内存地址值,也称为引用。表现形式有两种:

(1)十进制数 5040624,id()函数

(2)十六进制数 0x45AC6

说明:当直接输出对象名时,默认输出的是对象的内存地址值。

当在类中定义了__str__方法,则获取的是该方法返回的数据结果。

魔法方法名描述信息
__str__(self)输出对象名时,若不想直接输出内存地址值,可重写str()方法。

__str__方法语法:

class 类名:
    def __str__(self):
        代码
        ...
        return 字符串型的结果

说明:必须返回字符串型的结果。

例如,一起来完成:

(1)创建一个有两个参数的小轿车对象,直接输出对象名,观察结果;

(2)思考:在输出小轿车对象名时,如何把颜色、轮胎数显示出来?

# 1.定义类
class Car:
    def __init__(self,color,number):
        self.color = color
        self.number = number
​
    def __str__(self):
        # return "颜色:"+self.color
        return "颜色:"+self.color+",轮胎数:"+str(self.number)
​
# 2.输出对象名  -内存地址值
car = Car("白色",4)
# print(car)  # <__main__.Car object at 0x000001FBBCA72DF0>
# 3.如何显示
print(car)
# 总结
# 1.当直接输出对象名时,输出内存地址值,则表示没有重写str方法
# 2.当输出对象名不显示内存地址值, 重写了str方法

==总结:==

(1)注意:当没有重写__str__()方法时,输出对象名,则直接输出对象的()。==A、内存地址值==;B、属性名;

__del__()方法

==目标:==了解__del__()方法的使用。

当删除对象时,会自动调用__del__()方法。

魔法方法名描述信息
__del__(self)当一个对象被删除或销毁时,会被自动调用。

__del__()方法语法:

class 类名:
    def __del__(self):
        代码
        ...

例如,一起来完成:

(1)定义一个有品牌属性的车类;

(2)创建对象后,输出属性值;

(3)再使用__del__()方法删除对象查看效果;

(4)思考:当不调用【del 对象名】,__del__()方法会自动调用执行吗?

# 1.定义类
class Car:
    def __init__(self,brand):
        self.brand = brand
​
    def __del__(self):
        print("=========__del__===========")
​
# 2.创建对象
car = Car("BMW")
# 删除 -内存
# del car   # 注释
print(car.brand)
# 3.查看del
# 注意: 为了能更方便的查看del效果, 建议使用 del xx语法

==总结:==

(1)当使用【del 对象名】时,自动调用了__del__()方法;

(2)注意:当程序执行结束时,Python垃圾回收器会自动销毁内存垃圾,此时会自动调用__del__()方法。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就倒头睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值