‘’’
魔术方法: 一种特殊的方法而已
特点:不需要人工调用,在特定的时候自动执行。
-
init 初始化魔术方法
学习魔术方法的步骤:
1. 触发时机:实例化之后立即触发
2. 作用: 为对象添加对象所属成员
3. 参数:一个self是接收当前对象,其它的参数根据实例化的传参决定
4. 返回值:没有返回值
5. 注意事项:没有注意事项
‘’’
‘’’
__init__初始化魔术方法
class Human:
#属性
eye = '2个'
skin = '黄色'
#方法
#魔术方法
def __init__(self,kidname,bb): # init的形参
print('init方法被执行了')
#为对象添加成员
self.sex = '男'
self.age = '1'
self.name = kidname
self.aa = bb
def eat(self):
print('吃饭')
def run(self):
print('跑步')
def sleep(self):
print('睡觉')
#实例化一个对象
one = Human(‘小明’,‘cc’)
实例化对象之后触发魔术方法__init__,
分为两步:1.制作一个对象 2.为对象初始化操作(系统自动运行)
先在魔法方法的括号内设置一个形参接收数据,然后将形参放到需要添加成员的位置,
这样在实例化对象的括号内添加成员即可被参数接收到
可以设置多个参数
print(one.dict)
print(one)
‘’’
‘’’
2. new 构造方法 意思就是:构建,创造
学习魔术方法的步骤:
1. 触发时机:实例化对象的时候触发
2. 作用: 管理控制对象的生成
3. 参数:一个cls接收当前类,其它的参数根据实例化的参数决定
4. 返回值:可有可无,没有返回值,实例化结果为None
5. 注意事项:new魔术方法跟init的魔术方法的参数一致(除了第一个)
‘’’
‘’’
new 构造方法
class Human:
#属性
eye = '2个'
skin = '黄色'
#方法
#魔术方法 (重载object内部自带的__new__)
def __new__(cls,sex):
#print('new方法被触发了')
#return 2
#自己控制对象的生成过程(女的生,男的不生)
if sex == '女':
#生成对象并返回
return object.__new__(cls) #上帝之手
else:
#不生成对象
return None
def eat(self):
print('吃饭')
def run(self):
print('跑步')
def sleep(self):
print('睡觉')
#实例化一个对象
one = Human(‘女’) #这里控制对象的生成,条件满足 女 时才可以生成对象,否则报错
实例化对象的时候触发魔术方法__new__
分为两步:1.制作一个对象(new) 2.初始化对象(init)
print(one.eye) # 调用生成后的对象成员
one.run()
#print(one) #当条件无法满足生成对象时,打印对象时显示结果为None
‘’’
‘’’
#狸猫换太子游戏
#猴子类
class Monkey:
pass
#人类
class Human:
#重载人类的构建方法,用猴子类来做人的对象
def new(cls):
#使用猴子类代替人类创建对象
return object.new(Monkey) # 关键点在于括号内填上 Monkey 也就是猴子类
pass
#实例化一个人类对象
ren = Human()
print(ren) #打印人类的结果,出现的会是猴子类的数据
‘’’
‘’’
3. del 析构方法 (拆构方法)
学习魔术方法的步骤:
1. 触发时机:对象被系统回收的时候自动触发(del不一定触发)
2. 作用: 回收程序使用过程的信息和变量等(相当于清理垃圾文件)
3. 参数:一个self接收当前对象
4. 返回值:没有返回值
5. 注意事项:没有
‘’’
del 拆构方法
class Human:
#属性
eye = '2个'
skin = '黄色'
#方法
def eat(self):
print('吃饭')
def run(self):
print('跑步')
def sleep(self):
print('睡觉')
# 魔术方法
def __del__(self):
print('del方法被触发了')
#实例化一个对象
one = Human()
#print(’===============’) # 测试 del 被触发的时间,__del__在打印之后触发。
对象被系统回收的时候触发魔术方法__del__
#将对象同时赋值给另外一个变量
ss = Human()
#主动删除对象
del one # 删除变量,系统回收对象,不是使用del就一定会触发 del。
# 比如上面还有另外一个变量,只删除一个变量时不会触发 del
# 需要将所有变量全部del删除后才会触发 del