在类中追加列表(python)

sim*_*mon 0 python

我遇到了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)

然后,当然,记得在派生类中调用基础构造函数.


Rob*_*wie 5

@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类将是AVmenuMenu。但这绝不是必需的。