【发布时间】:2012-07-23 01:03:22
【问题描述】:
我正在覆盖类的 __new__() 方法以返回具有特定 __init__() 集的类实例。 Python 似乎调用了类提供的 __init__() 方法而不是特定于实例的方法,尽管 Python 文档位于
http://docs.python.org/reference/datamodel.html
说:
典型的实现通过调用 使用 super(currentclass, cls).__new__(cls[, ...]) 的超类的 __new__() 方法 使用适当的参数,然后将新创建的实例修改为 退货前需要。
如果 __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() 运行的唯一方法是在myclass.__init__() 内显式调用它为self.__init__()。
【问题讨论】:
标签: python object methods instances