魔法方法magic method

class Person()
  def _init_(self, name):
    self.name = name
    print(“我是初始化对象属性”)
    
  def _new_(cls, *args, **kwargs):
    super()._new_(cls, *args, **kwargs):
    print(“我是分配内存”)
     
  del _del_(self):
    print(“整个程序执行完之后,执行回收操作”)
     
  del _call_(self, *args, **kwagrs):
    print(“把对象当方法调用时,我就被调用了”)
     
  def _repr_(self):
    print(“我是__str__方法的备胎,它不在,我就顶上去”)
     
  def _str_(self):
    print(“我是正主,我来了,非指定情况下只执行我”)
     
p = Person()  # 创建实例化对象时,__new__和__init__方法顺序触发
 
p1 = Person()  # 创建实例化对象时,_new__和_init__方法顺序触发
 
p()       # 此时 _call
方法被触发
Person()()   # 此时 _call
方法被触发
 
print(a)    # 此时 __str__方法被触发,如果没有则触发__repr__方法。都没有,挪用父级object的__str__方法,默认打印在object上的地址
 
print("%r"%p)  # 手动调用__repr__方法
 
print("%s"%p)  # 手动调用__str__方法
 
del p1     # 此处 del 只是一个关键字,手动删除 p1 变量
print(“hello world”)
 
while True:
  pass
#·因为实例对象 p 是全局变量,以上程序都走完了,才会自动执行__del__方法。目前实例对象 p 依然未被回收

猜你喜欢

转载自blog.csdn.net/A_xiansheng/article/details/94594287