什么是魔术方法?
在Python中,所有用"__"包起来的方法,都称为【魔术方法】。
魔术方法一般是为了让显示器调用的,你自己并不需要调用它们。
__init__:初始化函数
这个方法主要是定义了对象的初始化操作。当我们新建一个对象 x=someclass() 的时候,__new__先创建类并返回类的实例,然后自动调用__init__来初始化函数的值。这两个共同构成了【构造函数】。在对象生命周期调用结束时,__del__方法会被调用,可以将__del__理解为“构析函数”。
__str__与__repr__ 都是改变对象的字符串显示。
如果类中定义了这个方法,当打印这个类的某个实例对象时,实际上就是在调用这个方法,打印出来的结果就是该方法所返回的值。
classPersonInfo:
def __init__(self, name, age):
self.name=name
self.age=age
def __str__(self):return f"{self.name}的个人信息"one_person= PersonInfo("星星", 20)
print(one_person)
print(str(one_person))
运行的结果是:
星星的个人信息
星星的个人信息
我们看到,print(one_person) 与 print(str(one_person)) 结果是一致的。其实,str(),当str(one_person)的时候,也就是在调用对象one_person的__str__方法。
当类中没有定义这个方法的时候,它们俩都会自动寻找__repr__这个魔术方法。
__getitem__(self,key):返回键对应的值。
__setitem__(self,key,value):设置给定键的值
__delitem__(self,key):删除给定键对应的元素。
__len__():返回元素的数量
classPersonInfo:def __init__(self, name, age):print("调用__init__")
self.name=name
self.age=age
self.one_dict={}def __setitem__(self, key, value):print("调用__setitem__")try:
self.one_dict[key]=valueexcept:print("setitem有异常啊")def __getitem__(self, item):print("调用__getitem__")try:returnself.one_dict[item]except:print("getitem有异常啊")def __len__(self):return len(self.one_dict) + 3one_person= PersonInfo("星星", 20)
one_person["school"] = "振华中学"one_person["hobby"] = "学习"one_person["ablilty"] = "编程"
print(one_person["school"])print(one_person[1])print(len(one_person))
运行的结果:
调用__init__
调用__setitem__
调用__setitem__
调用__setitem__
调用__getitem__
振华中学
调用__getitem__
getitem有异常啊
None
6