魔术方法
一种特殊的方法而已
特点
不需要人工调用,在特定时刻自动触发执行
魔术方法种类
1.__init__初始化方法*******
触发时机:实例化对象之后触发
作用:为对象添加对象的所属成员
参数:self,接收当前对象,其他的参数根据实例化的传参决定
返回值:无
注意事项:无
# _author:"Ma ren" # date: 2023/2/23 # __init__:初始化魔术方法 class Human: # 属性 name = '张三' age = 18 gender = 'male' skin = 'yellow' # 方法 def __init__(self,name,gender,age): # name是__init__的形参 print('__init__方法被执行') # print(self) # 为对象添加成员 self.name = name # self.name中的name是对象的成员 self.gender = gender self.age = age def eat(self): print('吃饭方法') def run(self): print('跑步方法') def sleep(self): print('睡觉方法') # 实例化一个人的对象 h1 = Human('lxx','male',18) #<1.制作一个对象,2.为对象初始化操作> print(h1.__dict__) # 打印对象成员View Code
2.__new__构造方法
触发时机:实例化对象的时候触发
作用:管理控制对象的生成过程
参数:一个cls接收当前类,其他的参数根据实例化的参数决定
返回值: 可有可无 没有返回值 实例化结果为None
注意事项:__new__魔术方法跟__init__的魔术方法参数一致(除了第一个)
# _author:"Ma ren" # date: 2023/2/23 # __new__构造方法 class Human: # 属性 name = '张三' age = 18 gender = 'male' skin = 'yellow' # 方法 # 魔术方法 def __new__(cls, *args, **kwargs): # print('__new__方法被触发') # return 2 # 自己控制对象的生成(女的生,男的不生) # print(args) if '男' in args: # 不生成对象 pass else: # 生成对象且返回 return object.__new__(cls) # object上帝之手 def eat(self): print('吃饭方法') def run(self): print('跑步方法') def sleep(self): print('睡觉方法') h1 = Human('女') # 实例化对象【1.制作一个对象(new),2.初始化对象】 print(h1) # 利用__new__方法来一个狸猫换太子 # _author:"Ma ren" # date: 2023/2/23 class Monkey: pass class Human: def __new__(cls, *args, **kwargs): return object.__new__(Monkey) pass # 看似使用人类造对象,实际却生成了一个猴子对象 human_obj = Human() print(human_obj)View Code
3.__del__析构方法
触发时机:对象被系统回收的时候触发
作用:回收系统使用过程中的信息和变量
参数:一个self接收当前对象
返回值:无
注意事项:无
# _author:"Ma ren" # date: 2023/2/23 # __del__魔术方法 class Human: # 属性 name = '张三' age = 18 gender = 'male' skin = 'yellow' # 方法 def eat(self): print('吃饭方法') def run(self): print('跑步方法') def sleep(self): print('睡觉方法') # 析构方法 def __del__(self): print('__del__方法被触发') h = Human() print(h) # 主动删除对象 del h # 删除对象,系统回收对象 print('=================')View Code
标签:__,Python,self,魔术,对象,print,方法,def,大全 From: https://www.cnblogs.com/MRPython/p/17149768.html