#魔术方法
'''
__init__:初始化魔术方法
触发时机:初始化对象时触发,不是实例化触发,但是和实例化触发在一个操作中
__new__:实例化的魔术方法
触发时机:在实例化时触发
__call__:对象调用方法
触发时机:将对象当成函数使用的时候,会默认调用此函数中的内容
__str__:
触发时机:打印对象名,自动触发去调用__str__里面的内容
注意:一定要在__str__方法中添加return,return后面的内容就是打印对象看到的内容
__del__:delete的缩写 析构魔术方法
触发时机:当对象没有用的时候被触发(没有任何变量引用)
__del__:
1.对象赋值
p=person()
p1=p
说明:p, p1共同指向一个地址
2.删除地址的引用
del p1 删除p1对地址的引用
3.查看对地址的引用次数
import sys
sys.getrefcount()
4.当一块空间没有了任何引用,默认执行__del__
ref=0
'''
1 import sys 2 3 class person: 4 5 def __init__(self,name): 6 print('-------->init') 7 self.name=name 8 9 def __new__(cls,*args,**kwargs): 10 print('--------->new') 11 position=object.__new__(cls) 12 print(position) 13 return position 14 15 def __call__(self,name): 16 print('--------->call') 17 print('执行对象得到的参数是:',name) 18 19 def __del__(self): 20 print('----------->del--------') 21 22 23 p=person('ja') 24 p('jack') 25 26 p1=p 27 p2=p 28 29 print(p) 30 print(p.name) 31 print(p1.name) 32 print(p2.name) 33 34 p1.name='tom' 35 print(p.name) 36 print(p2.name) 37 38 del p1 39 print('删除后:',p.name) 40 41 del p2 42 print('删除后:',p.name) 43 44 print(sys.getrefcount(p))
#魔术方法
'''
__str__:
触发时机:打印对象名,自动触发去调用__str__里面的内容
注意:一定要在__str__方法中添加return,return后面的内容就是打印对象看到的内容
'''
1 class person: 2 def __init__(self,name,age): 3 self.name=name 4 self.age=age 5 6 def __str__(self): 7 return '姓名是:'+self.name+'年龄是:'+str(self.age) 8 9 p=person('tom',13) 10 print(p)