2013-02-25 60 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 2013-02-25 19:55:11

+2

gangsta wangsta可能是問題... – 2013-02-25 19:59:14

+0

沒有錯誤,A .__ init__最終成爲「blah,blah,blah」而不是「gangsta wangsta」 – user2108657 2013-02-25 19:59:52

回答

2

最簡單的方法是子類:

class B(A): 
    __init__ = my_init 
+0

這是*正確的*答案,雖然它沒有解決該操作問的方法(+ +1都是相同的正確答案) – 2013-02-25 20:03:07

+0

爲什麼這是正確的方式與你的答案? – user2108657 2013-02-25 20:16:09

+0

因爲全局改變一個類的行爲被認爲是不禮貌的。畢竟,你沒有問任何其他模塊可能會使用類'A'他們對這個改變的想法...... – mgilson 2013-02-25 20:17:28

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 2013-02-25 19:58:47