我正在覆盖__new__()
一个类的方法以返回一个具有特定__init__()
集合的类实例。Python 似乎调用类提供的__init__()
方法而不是实例特定的方法,尽管 Python 文档位于
http://docs.python.org/reference/datamodel.html
说:
典型的实现通过使用 super(currentclass, cls).__new__(cls[, ...]) 和适当的参数调用超类的 __new__() 方法来创建类的新实例,然后在返回之前根据需要修改新创建的实例它。
如果 __new__() 返回 cls 的实例,则新实例的 __init__() 方法将像 __init__(self[, ...]) 一样被调用,其中 self 是新实例,其余参数与传递给的参数相同__新的__()。
这是我的测试代码:
#!/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__()
inside myclass.__init__()
。