http://docs.python.org/reference/datamodel.htmlbr/> говорит:
Реализации создают новый экземпляр класса, вызывая метод
superclass _ new < /em> _ () с использованием super (currentclass, cls) ._ new < /em> _ (cls [, ...])
с соответствующими аргументами, а затем изменяет новой экземпляр как
, прежде чем вернуть его. _ new _ () Возвращает экземпляр CLS, тогда метод нового экземпляра _ init _ ()
будет вызван как _ init _ (self [, ...]), где самостоятельно является новым экземпляром, а
, оставшиеся аргументы, такие же, как и _ em>. /> < /blockquote>
Вот мой тестовый код: < /p>
Код: Выделить всё
#!/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()
< /code>
, который выводит < /p>
$ python --version
Python 2.6.6
$ ./mytest.py
myclass.__init__ called, self.__init__ is
myinit called, args = (), kwargs = {}
Подробнее здесь: https://stackoverflow.com/questions/116 ... n-but-call