Python常用魔术方法详解
1、__init__()
class Demo:
def __init__(self, name, age):
self.name = name
self.age = age
print("姓名:",self.name)
print("年龄:",self.age)
if __name__ == '__main__':
de = Demo("QA", 23)
输出:
姓名: QA
年龄: 23
总结
1、触发方式:类实例化的时候自动调用。
2、作用:用于创建实例属性。
2、__new__()
class Demo:
def __init__(self):
print("如果不在__new__方法里面调object的__new__方法就不会创建对象,__init__不会被执行")
print("如果不在__new__方法里面return创建好的对象,__init__不会被执行")
def __new__(cls, *args, **kwargs):
print("__new__方法通过调用object类的__new__方法创建对象,再把对象传递给__init__方法")
return super().__new__(cls,*args,**kwargs)
if __name__ == '__main__':
de = Demo()
输出:
__new__方法通过调用object类的__new__方法创建对象,再把对象传递给__init__方法
如果不在__new__方法里面调object的__new__方法就不会创建对象,__init__不会被执行
如果不在__new__方法里面return创建好的对象,__init__不会被执行
总结
1、触发方式:实例化类的时候自动调用。
2、作用:创建类实例。
3、__new__()方法执行顺序在__init__()之前。
4、如果不在__new__方法里面调object的__new__方法就不会创建对象,__init__也不会被执行。
5、如果不在__new__方法里面return创建好的对象,__init__也不会被执行。
3、__call__()
class Demo:
def __init__(self):
print("初始化方法在类实例化的时候执行")
def __call__(self):
print("将类实例当做函数调用的时候触发__call__方法")
if __name__ == '__main__':
cl = Demo()
cl()
输出:
初始化方法在类实例化的时候执行
将类实例当做函数调用的时候触发__call__方法
总结
1、触发方式:将类实例像调函数一样调用的时候自动调用。
2、作用:让类实例可以像调函数一样调用。
3、构造方法__new__的执行是由创建对象触发的,即:对象 = 类名() 。
4、对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
4、__del__()
class Demo:
def __del__(self):
print("del")
if __name__ == '__main__':
cl = Demo()
总结
1、触发方式:对象在内存中被释放时,自动触发执行。
2、此方法一般无须定义,Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,此工作都是交给Python解释器来执行,__del__()的调用是由解释器在进行垃圾回收时自动触发执行的。
5、__str__()
class Demo:
def __init__(self):
pass
def __str__(self):
print("操作类实例的时候自动化调用__str__")
return "__str__()方法"
if __name__ == '__main__':
cl = Demo()
print(cl)
输出:
操作类实例的时候自动化调用__str__
__str__()方法
总结
1、触发方式,操作类实例的时候自动调用。
2、作用,用于操作类实例的时候返回指定的数据。
6、__setitem__()
class Demo:
def __init__(self,name):
self.name=name
def __setitem__(self, key, value):
print("执行obj[key]=value的时候触发__setitem__方法")
self.__dict__[key]=value
if __name__ == '__main__':
cl = Demo("QA")
cl["age"] = 20
print(cl.__dict__)
输出:
执行obj[key]=value的时候触发__setitem__方法
{'name': 'QA', 'age': 20}
总结
1、触发方式,执行obj[key]=value的时候自动调用。
2、作用,用于设置对象属性。
7、__getitem__()
class Demo:
def __init__(self,name):
self.name=name
def __getitem__(self, item):
print("执行obj[key]获取实例属性的时候触发__getitem__方法")
return self.__dict__[item]
if __name__ == '__main__':
cl = Demo("QA")
print(cl["name"])
输出:
执行obj[key]获取实例属性的时候触发__getitem__方法
QA
总结
1、触发方式,执行obj[key]获取实例属性的时候自动调用。
2、作用,用于返回属性值。
8、__delitem__()
class Demo:
def __init__(self,name):
self.name=name
def __setitem__(self, key, value):
print("执行obj[key]=value的时候触发__setitem__方法")
self.__dict__[key]=value
def __delitem__(self, key):
print('执行 del obj[key]时触发__delitem__')
self.__dict__.pop(key)
if __name__ == '__main__':
cl = Demo("QA")
cl["age"] = 20
print(cl.__dict__)
del cl["age"]
print(cl.__dict__)
输出:
执行obj[key]=value的时候触发__setitem__方法
{'name': 'QA', 'age': 20}
执行 del obj[key]时触发__delitem__
{'name': 'QA'}
总结
1、触发方式:执行del obj[key]时自动调用。
2、作用:用于删除对象属性。