我有一個類,我想在其中存儲同一類的對象的靜態引用列表。例如:在類級別屬性中存儲實例(自我)的列表?
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