您的B班的__new__
需要致電A的__new__
。這是一個使用內置list
類的簡短演示。
class mylist(list):
def __new__(cls, obj=None):
return list.__new__(cls, obj)
def mymethod(self, msg):
print msg, id(self)
def main():
a = mylist('abc')
print a, id(a)
a.mymethod('hello')
if __name__ == '__main__':
main()
如果你只是想簡單的功能添加到現有的類的實例,你可以做這樣的事情。
class A(object):
pass
def silly(arg=None):
print 'This is silly', arg
b = A()
b.my = silly
b.my()
注意b.my
它只是一個功能,而不是一個方法,所以它不當你叫它獲得通過自我。但是,你可以通過它 「手工」 做b.my(b)
編輯
作爲替代書寫list.__new__(cls, obj)
,你可以調用super()
功能:
def __new__(cls, obj=None):
return super(mylist, cls).__new__(cls, obj)
但在大多數使用基類名稱的情況越來越簡單。我想可能是一個理由更喜歡super()
,但我不夠專業這方面的專家說。 :)
相關:http://stackoverflow.com/questions/25394550/adding-methods-to-an-existing-class-instance-or-how-to-subclass-an-instance – 2014-10-05 03:51:46
@NickT:謝謝你。這似乎太複雜了。是不是支持這種基本面向對象的東西的語言?在C++中,它將是一個簡短的單線程。紅寶石相同(AFAIK)。或者Python不以這種方式工作?我很困惑... – 2014-10-05 04:10:09
似乎你應該可以使用裝飾:http://thecodeship.com/patterns/guide-to-python-function-decorators/ – user4107395 2014-10-05 04:55:25