Почему метод экземпляра питона не вызовет __init __ () для создания экземпляра, но вместо этого вызывает класс __init __Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему метод экземпляра питона не вызовет __init __ () для создания экземпляра, но вместо этого вызывает класс __init __

Сообщение Anonymous »

Я переопределяю метод __new __ () класса для возврата экземпляра класса, который имеет определенный __init __ () . Python, кажется, вызывает метод, предоставляемый классом __init __ () вместо метода, специфичного для экземпляра, хотя документация Python AT
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 = {}
Это кажется единственным способом получить myinit () для запуска, - это явно назвать это самостоятельно.>

Подробнее здесь: https://stackoverflow.com/questions/116 ... n-but-call
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»