我遇到了python中的继承问题,我知道如何避免,但不完全理解.在制作菜单时出现问题,但我已经将代码简化为真正的问题.码:
class menu:
buttonlist=[]
>>> class av(menu):
def __init__(self, num):
self.buttonlist.append(num)
print self.buttonlist
>>> AV=av(12)
[12]
>>> class main(menu):
def __init__(self, num):
self.buttonlist.append(num)
print self.buttonlist
>>> Main=main(14)
[12, 14]
>>> AV.buttonlist
[12, 14]
Run Code Online (Sandbox Code Playgroud)
我期望通过'Main = main(14)'获得[14],并使用'AV.buttonlist'获得[12],但是似乎append在所有类和对象中附加了列表:S can有谁向我解释为什么会这样?
提前致谢!
Cat*_*lus 10
因为buttonlist是类变量,而不是实例变量.如果希望它在实例的本地,则需要在构造函数中指定它.
class menu:
def __init__(self):
self.buttonlist = []
Run Code Online (Sandbox Code Playgroud)
然后,当然,记得在派生类中调用基础构造函数.
@Cat 打败了我,但这里有一些工作代码
class Menu(object):
def __init__(self):
self.buttonlist = []
class AV(Menu):
def __init__(self, num):
Menu.__init__(self)
self.buttonlist.append(num)
print self.buttonlist
class Main(Menu):
def __init__(self, num):
Menu.__init__(self)
self.buttonlist.append(num)
print self.buttonlist
>>> av = AV(12)
>>> main = Main(14)
Run Code Online (Sandbox Code Playgroud)
请注意,该公约是在命名Python类与驼峰这样你的av类将是AV和menu会Menu。但这绝不是必需的。