什么是魔法方法?
==目标:==了解什么是魔法方法?
魔法方法指的是:可以给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__()
方法。