gpt4 book ai didi

python - 从对象扩展类

转载 作者:行者123 更新时间:2023-12-01 05:57:17 70 4
gpt4 key购买 nike

我有一些类(class):

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')

如何从类 Window 的对象扩展类 Control|Button 来访问函数 getWindowName > 和对象 btnOK 中的字段 wind_name

有没有办法不用在Control类中创建字段self.wnd = wnd,或者在Window中添加方法setWindowName... ?

我无法从Window类继承Control类!这不符合逻辑。

最佳答案

Python 允许从多个类继承,即

class Button(Control, Window):
...

但在这种情况下,您应该确切地知道您在做什么(谈到 Python 方法解析顺序 (MRO))。我建议阅读这本小书:Python Attributes and Methods .

关于python - 从对象扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11843829/

70 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com