我有一个类,我想在其中存储同一个类的对象的静态引用列表。例如:
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
有更好的方法吗?
这会在模块内部和外部工作,这取决于我导入模块的方式吗?
答案 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")