我有一个类,我想在其中存储同一类的对象的静态引用列表。例如:在类级别属性中存储实例(自我)的列表?
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
这会导致错误。 为什么不能工作?
我已经改变了代码以下,这似乎在控制台上工作:
class Apple:
NICE_APPLES = []
def __init__(self, name, colour):
self.name = name
self.colour = colour
Apple.NICE_APPLES = [Apple('Elstar', 'Green'), Apple('Braeburn', 'Red'),
Apple('Pink Lady', 'Pink')]
有没有更好的方式来做到这一点? 这是否会在模块内部和外部工作,并且这取决于我导入模块的方式?
在完成创建类之前,您无法创建类的实例!它在创建之前不会被绑定到名称上。 – jonrsharpe
这听起来像[XY](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)问题。你为什么想这样做?你想达到什么目的? –
这种方法的一个潜在问题 - 无论实例添加到列表中的哪个位置 - 将在实例被删除时维护列表,因为没有机制会自动删除它们。更好的方法是使用现有的容器类之一,如列表和字典,或者可以使用自定义的容器类。类别不应该关心自己的实例的存在(或不存在)。另一方面,也许你的实例应该是'Apple'的子类,在这种情况下,会有'class .__子类__()'来跟踪它们。 – martineau