(python) Создать представитель класса без __init__
Как это делается правильно?Как правильно не скажу, но неправильно можно так
In [1]: class C:
...: def __init__(self): print "yo"
...:
In [2]: C
yo
Out[2]: <__main__.C instance at 0x92bd1ec>
In [3]: tmp = C.__init__
In [4]: C.__init__ = lambda s: None
In [5]: C
Out[5]: <__main__.C instance at 0x92bd0ac>
In [6]: C.__init__ = tmp
In [7]: C
yo
Out[7]: <__main__.C instance at 0x92bd04c>
ЗЫ
Вроде еще можно как-то через __new__ но для меня это пока чорная магия
ЗЗЫ
Если класс унаследован от объекта, можно что-то типа C.__new__(C)
а, может, A - не new-style класс? проверь, что такое new style
For compatibility reasons, classes are still old-style by default. New-style classes are created by specifying another new-style class (i.e. a type) as a parent class, or the "top-level type" object if no other parent is needed.
А с __new__ делает то что нужно. Буду разбираться почему.
дык он точно new-style?
А с __new__ делает то что нужно. Буду разбираться почему.Наверно, потому что он это и должен делать
If __new__ returns an instance of cls, then the new instance's __init__ method will be invoked like "__init__(self[, ...])", where self is the new instance and the remaining arguments are the same as were passed to __new__.
If __new__ does not return an instance of cls, then the new instance's __init__ method will not be invoked.
Оставить комментарий
Dmitriy82
Нужно создать экземпляр класса без вызова метода __init__.Вроде как для этого предназначен new.instance. Однако он принимает в качестве аргумента classobj, в то время как type(A) - type, если A - new-style class. И он на это ругается.
Как это делается правильно?