什么是魔术方法?
在Python中,所有用"__"包起来的方法,都称为【魔术方法】。
魔术方法一般是为了让显示器调用的,你自己并不需要调用它们。
__init__:初始化函数
这个方法主要是定义了对象的初始化操作。当我们新建一个对象 x=someclass() 的时候,__new__先创建类并返回类的实例,然后自动调用__init__来初始化函数的值。这两个共同构成了【构造函数】。在对象生命周期调用结束时,__del__ 方法会被调用,可以将__del__理解为“构析函数”。
__str__与__repr__ 都是改变对象的字符串显示。
如果类中定义了这个方法,当打印这个类的某个实例对象时,实际上就是在调用这个方法,打印出来的结果就是该方法所返回的值。
class PersonInfo: 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__():返回元素的数量
class PersonInfo: 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] = value except: print("setitem有异常啊") def __getitem__(self, item): print("调用__getitem__") try: return self.one_dict[item] except: print("getitem有异常啊") def __len__(self): return len(self.one_dict) + 3 one_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