2013-02-25 2 views
0

у меня есть:Как переопределить init?

Class A: 
    def __init__(self, y): 
     blah, blah, blah 
    def af(self, h): 
     print "this" 

я над ездить DEFS так:

def my_init(self,h): 
    gangsta wangsta 
def aff(self,h): 
    print "that" 

A.af = aff # works 
A.__init__ = my_init # doesn't work 

Он не работает с INIT .... Как это сделать ж/__init__?

+2

В каком виде это не сработало? – BrenBarn

+2

gangsta wangsta, вероятно, проблема ... –

+0

Ошибка, A .__ init__ заканчивается тем, что она была «blah, blah, blah», а не «gangsta wangsta» – user2108657

ответ

2

Самый простой способ это подкласс:

class B(A): 
    __init__ = my_init 
+0

это * правильный * ответ, хотя он не обращается к методу, о котором спрашивает op (+1 все равно для правильного ответа) –

+0

это правильный путь против вашего ответа? – user2108657

+0

Потому что считается непоследовательным, чтобы изменить поведение класса во всем мире. В конце концов, вы не спросили ни один из других модулей, которые могли бы использовать класс 'A', что они думали об этом изменении ... – mgilson

2

, что именно проблема?

>>> class X: 
... def __init__(self): 
...  print "Original Init!" 
... 
>>> def new_init(self): 
... print "OK New Init" 
>>> X() 
Original Init! 
>>> X.__init__ = new_init 
>>> X() 
OK New Init 
+0

Я просто собирался прокомментировать это. – Bakuriu