主要就是根据自己的理解翻译了部分里面的内容。还有很多没有翻译的。
object.__new__(cls[, ...])
当创建类cls新的类实例的时候调用。__new__是一个静态函数。他的第一个参数是要创建的对象的类。剩下的参数传递给对象的构造表达式(构造表达式就是a = A(3))。__new__函数的返回值通常是cls类的实例.
典型的创建类的新实例的场景就是调用父类的__new__函数,通过super(currentclass, cls).__new__(cls[, ...])以及合适的参数。并且可以修改新创建的实例在返回他之前。
如果__new__返回cls类的一个新实例,接下来新实例的__init__函数将会被调用,__init__(self[, ...])。这其中self是新实例本身,剩下的参数是__new__里面除了cls之外的参数。
如果__new__没返回cls类的一个新实例,那这个新实例的__init__函数也不会被调用。
__init__(self[, ...])主要是用来使immutable类型(像int,str,tuple)来定制实例的创建。他通常在元类里面被重写,以定制类的创建。
#==================================
class A(object):
def __new__(cls, a=3):
print "in new"
print a
nobj = super(A, cls).__new__(cls, a)
return nobj
def __init__(self, a):
print "in init"
print a
a = A(5)
C:\>python test.py
in new
5
in init
5
class A(object):
def __new__(cls, a=3):
print "in new"
print a
nobj = super(A, cls).__new__(cls, a)
# return nobj
def __init__(self, a):
print "in init"
print a
a = A(5)
C:\>python test.py
in new
5
#==================================
object.__init__(self[, ...])
当对象被创建的时候调用。参数是传递给构造表达式的那些参数。如果父类有一个__init__函数,在这个类的__init__函数里面最好显式的调用父类的__init__函数,以确保这个类里面父类的相关属性都被初始化了。如:BaseClass.__init__(self, [args...])。作为一个强制的规定,__init__必须return None,如果不是这样就会在运行时抛出TypeError异常。
object.__del__(self)
当实例即将被销毁时调用。这个函数仍然会调用析构器。如果父类有一delete函数,子类中最好显式的调用父类的析构函数,以确保子类里面父类的部分被析构。
object.__repr__(self)
这个函数将被repr()这个python的内建函数调用,当用来将一个对象转换为字符串的时候使用。这个函数的返回值必须是一个对象。这个函数一般是在print object的时候调用的。如果这个类里面没有定义__str__函数,那么在str(object)的时候这个__repr__函数会被调用,来替代__str__
object.__str__(self)
这个函数和repr一样,只不过他是在str(object)的时候调用的。如果这个类没有定义__repr__函数,那么在print object的时候,__str__函数会被调用,来替代__repr__
object.__lt__(self, other) 重载了< xobject.__le__(self, other) 重载了<= x<=y calls x.__le__(y)
object.__eq__(self, other) 重载了== x==y calls x.__eq__(y)
object.__ne__(self, other) 重载了!= x!=y and x<>y call x.__ne__(y)
object.__gt__(self, other) 重载了> x>y calls x.__gt__(y)
object.__ge__(self, other) 重载了>= x>=y calls x.__ge__(y)
以上这些函数返回True或者False,但是也可以返回其他任意的值。
object.__cmp__(self, other)
如果类里面没有定义上面的那些比较函数,如果碰到比较,就调用这个函数
object.__hash__(self)
当调用hash(object)的时候调用
object.__nonzero__(self)
当调用bool(object)的时候调用,应该返回True,False,或者0,1
object.__unicode__(self)
当调用unicode(object)的时候调用。这个函数应该返回一个unicode对象。如果一个类没有定义这个函数,unicode(object)的时候就会调用__repr__或者__str__。__repr__或者__str__返回的string类型的对象,系统会自动转换成unicode类型的。
object.__getattr__(self, name)
当调用s = object.name的时候调用。并且name没有在类里面定义
object.__setattr__(self, name, value)
当调用object.name = value的时候调用。
object.__delattr__(self, name)
当调用del obj.name的时候调用这个函数
#============================================================
class A(object):
a = 5
def __setattr__(self, name, value):
print "in setattr"
def __getattr__(self, name):
print "in getattr"
return "aaa"
def __delattr__(self, name):
print "in delattr"
a = A()
s = a.name
print s
a.newname = 'abc'
del a.b
s = a.a #a已经定义了,所以没有调用__getattr__函数
C:\>python test.py
in getattr
aaa
in setattr
in delattr
#============================================================
object.__getattribute__(self, name)
这个只有在新式类(从object或者type派生的类)里面有。和__getattr__基本上一样
object.__get__(self, instance, owner)
object.__set__(self, instance, value)
object.__delete__(self, instance)
以上三个是descriptor的内容
object.__call__(self[, args...])
当调用object(param, param1...)的时候调用
object.__len__(self)
当调用len(object)的时候调用
object.__getitem__(self, key)
当调用object[key]的时候调用
object.__setitem__(self, key, value)
当调用object[key] = value的时候调用
object.__delitem__(self, key)
当调用del object[key]的时候调用
object.__reversed__(self)
当调用reversed(object)的时候调用
object.__contains__(self, item)
当调用调用item in object的时候调用
阅读(1443) | 评论(0) | 转发(0) |