魔术方法
init__和__new
#魔术方法
class Person():
'''
初始化魔术方法
触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中)
'''
def __init__(self):
#self.name =name
print('===init====')
def __new__(cls, *args, **kwargs):
'''
实例化魔术方法
触发时机: 在实例化对时触发
'''
print('===new===')
position = object.__new__(cls)
print(position)
return position
p = Person()
print(p)
===new===
<__main__.Person object at 0x00000248720D31C8>
===init====
<__main__.Person object at 0x00000248720D31C8>
new__方法的作用是申请内存开辟空间
流程是:
1、Person()进行到__new__进行申请空间,position就是新空间,然后返回给__init
2、__init__接收到__new__返回的新空间positon,进行初始化。
3、p =Person()接受到__init__执行完毕的地址,p =position。
call
对象调用方法,
触发时机:将对象当成函数使用的时候,会默认调用此函数的内容。
#魔术方法
class Person():
'''
初始化魔术方法
触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中)
'''
def __init__(self,name):
self.name =name
print('===init====')
def __new__(cls, *args, **kwargs):
'''
实例化魔术方法
触发时机: 在实例化对时触发
'''
print('===new===')
position = object.__new__(cls)
print(position)
return position
def __call__(self, name):
print('===call===')
print('将对象当作函数调用时:',name)
p = Person('jack')
print(p.name)
p('hello') #将对象作函数调用。
输出:将对象当作函数调用时: hello
str
#__del__魔术方法
#触发时机:打印对象名 自动触发去调用__str__里面的内容
#注意:一定要在__str__方法中添加return,return后面的内容就是打印对象所看到的内容
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
#def __del__(self):
# print('===del====')
def __str__(self):
return '姓名是:' + self.name + ', 年龄:' + str(self.age)
p = Person('jack',18)
print(p)
总结:
init(构造方法,创建完空间之后调用的第一个方法);
__str__打印更多的信息。