課堂上,我有一些類:擴大從對象
class Window(object):
def __init__(self, name):
self.wind_name = name
def getWindowName(self):
return 'wnd' + self.wind_name
class Control(object):
def __init__(self, name, wnd):
self.contrl_name = name
setattr(self, 'getWindowName', wnd.getWindowName)
setattr(self, 'wind_name', wnd.wind_name)
def getControlName(self):
return (self.getWindowName(), 'unk' + self.contrl_name)
class Button(Control):
def __init__(self, name, wnd):
super(Button, self).__init__(name, wnd)
def getControlName(self):
return (self.getWindowName(), 'btn' + self.contrl_name)
wnd = Window('MyApp')
btnOK = Button('OK', wnd)
btnOK.getControlName() # work ok., return ('wndMyApp', 'btnOK')
btnOK.wind_name = 'NewApp'
btnOK.getControlName() # does not work properly., return ('wndMyApp', 'btnOK')
我如何延長類Control
| Button
從類Window
的對象訪問函數getWindowName
和字段wind_name
對象btnOK
?
有沒有在類Control中創建字段self.wnd = wnd
的方法,或者在Window
中添加方法setWindowName
...?我不能從類Window
繼承類Control
!這不合邏輯。
謝謝,它會起作用,但我不想創建臨時屬性來存儲Window類的實例。我只想擴展'Window.self'的'Control.self'。 – Nikitron 2012-08-07 11:31:08
這種方法很好,但是如果Window類會有很多變量,這很難維護。 – Nikitron 2012-08-07 11:36:22
您可以使用__getattr__和__setattr__方法來代理所有方法。但是你可以很容易地將自己拍攝在腳下,所以最好是手動添加方法 – 2012-08-07 12:11:36