在类级属性中存储(self)实例列表?

时间:2017-06-04 21:18:21

标签: python python-3.x class static attributes

我有一个类,我想在其中存储同一个类的对象的静态引用列表。例如:

if (isset($_POST['stayLoggedIn'])

这会导致class Apple: NICE_APPLES = [Apple('Elstar', 'Green'), Apple('Braeburn', 'Red'), Apple('Pink Lady', 'Pink')] def __init__(self, name, colour): self.name = name self.colour = colour 错误。 为什么这不起作用?

我已将代码更改为以下内容,这似乎适用于控制台:

NameError: name 'Apple' is not defined

有更好的方法吗? 这会在模块内部和外部工作,这取决于我导入模块的方式吗?

3 个答案:

答案 0 :(得分:2)

使用classmethod将苹果附加到班级列表中。

class Apple:

    NICE_APPLES = []

    def __init__(self, name, colour):
        self.name = name
        self.colour = colour

    @classmethod
    def add_nice_apple(cls, name, colour):
        cls.NICE_APPLES.append(cls(name, colour))


Apple.add_nice_apple('Elstar','Green')
Apple.add_nice_apple('Braeburn','Red')

答案 1 :(得分:1)

NICE_APPLES声明为Apple类中的空列表,然后在__init__()内部,当您完成所有局部变量的分配后,将self附加到列表中。

class Apple(object):

    NICE_APPLES = []

    def __init__(self, name, color, keep=False):
        self.name = name
        self.color = color

        if keep:
            Apple.NICE_APPLES.append(self)

答案 2 :(得分:0)

你可以从类方法创建新的类实例,就像这样,我认为这是一个干净的方式,你也可以,如果你想存储最近创建的obj除了硬编码列表之外:

class Apple:

    NICE_APPLES = []

    def __init__(self, name, colour):
        self.name = name
        self.colour = colour

    @classmethod
    def init_with_nice_apples(self, name, colour):
        Apple.NICE_APPLES = [Apple('Elstar', 'Green'), Apple('Braeburn', 'Red')] #hardcore list
        self.__init__(self,name, colour)
        Apple.NICE_APPLES.append(self)
        return self

ap = Apple.init_with_nice_apples("Delicius", "Red")