python类中的一些神奇方法
__str__:用于在print(对象)时,直接打印__str__的返回值
1 class Animal: 2 def __init__(self, name): 3 self.name = name 4 def __str__(self): 5 return self.name 6 7 d = Animal("dog") 8 print(d)
__fun_name:私有方法
1 class Animal: 2 def __init__(self, name): 3 self.name = name 4 def eat(self): 5 self.__test() 6 print("吃东西") 7 #test为私有方法,不能在类外部调用 8 def __test(self): 9 print("debug") 10 11 d = Animal("dog") 12 # 提示 AttributeError: 'Animal' object has no attribute '__test' 13 # d.__test() 14 d.eat()
__del__:对象销毁时调用的方法
1 class Animal: 2 def __init__(self, name): 3 self.name = name 4 def __del__(self): 5 print("---go die---") 6 7 d = Animal("dog") 8 dd = d 9 del d #仅仅删除一个引用计数,引用计数为0时才销毁对象,并且调用__del__方法 10 del dd 11 print("******")
__new__:根据类对象创建实例对象(发生在__init__之前)
比如代码中定义了Dog类,在类定义结束后创建了类对象,然后调用Dog()创建实例对象,创建实例对象过程中,如果Dog自己实现了__new__(cls)方法(cls表示根据类对象创建实例对象),那么需要return object.__new__()才能正确创建实例对象。
1 class Dog(object): 2 def __init__(self): 3 print("--init---") 4 5 def __del__(self): 6 print("--del---") 7 8 def __new__(cls): 9 print("---new---") 10 return object.__new__(cls) 11 12 #调用顺序 Dog.__new__ -> object.__new -> d.__init__ -> d.__del__ 13 d = Dog() 14 15 结果: 16 ---new--- 17 --init--- 18 --del---