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---

 

posted @ 2018-01-09 15:33  许小伍  阅读(341)  评论(0编辑  收藏  举报