2013-02-25 61 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