该篇文章对python内置函数,主要是元编程涉及到的类进行汇总.
__new__和__init__
因为使用markdown,__会被识别为加粗,标题可以使用\_\_来进行转义.或者使用```.
eg.
1 2 3 4 5 6 7 8
| class A(object): def __init__(self): print "init" def __new__(cls,*args, **kwargs): print "new %s"%cls return object.__new__(cls, *args, **kwargs)
A()
|
output:
1 2
| new <class '__main__.A'> init
|
解释
1 2 3 4 5
| 继承object的类才有__new__ __new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供 __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例 __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值 若__new__没有正确返回当前类cls的实例,那__init__是不会被调用的,即使是父类的实例也不行
|
__repr__
eg.
1 2 3 4 5 6 7 8 9
| class A: def __repr__(self): return "repr"
def __str__(self): return "str"
print str(A()) print repr(A())
|
output:
解释
1
| 一般类的实现str将被转化为适于人阅读的模式,而repr更适于解释器读取.
|
__call__
eg.
1 2 3 4 5 6 7 8 9
| class A: def main(self, content): return content
def __call__(self, content): return self.main(content)
a = A() print a('main')
|
output: