我正在打扰 __new__()
返回具有特定类的类实例的类的方法 __init__()
组。 Python似乎称之为提供的类 __init__()
方法而不是特定于实例的方法,虽然Python文档在
http://docs.python.org/reference/datamodel.html
说:
典型的实现通过调用来创建类的新实例 superclass的__new __()方法使用super(currentclass,cls).__ new __(cls [,...]) 使用适当的参数,然后将新创建的实例修改为 在返回之前必要的。
如果__new __()返回cls的实例,那么新实例的__init __()方法 将像__init __(self [,...])一样被调用,其中self是新实例和 剩下的参数与传递给__new __()的参数相同。
这是我的测试代码:
#!/usr/bin/env python
import new
def myinit(self, *args, **kwargs):
print "myinit called, args = %s, kwargs = %s" % (args, kwargs)
class myclass(object):
def __new__(cls, *args, **kwargs):
ret = object.__new__(cls)
ret.__init__ = new.instancemethod(myinit, ret, cls)
return ret
def __init__(self, *args, **kwargs):
print "myclass.__init__ called, self.__init__ is %s" % self.__init__
self.__init__(*args, **kwargs)
a = myclass()
哪个输出
$ python --version
Python 2.6.6
$ ./mytest.py
myclass.__init__ called, self.__init__ is <bound method myclass.myinit of <__main__.myclass object at 0x7fa72155c790>>
myinit called, args = (), kwargs = {}
这似乎是获得的唯一途径 myinit()
运行,是明确地称之为 self.__init__()
内 myclass.__init__()
。