是否有可能給'Nonetype' object
分配屬性來告訴Python在被調用時該怎麼做?給'NoneType'對象屬性
這裏是我的問題:
我有一個類,用作庫存儲的myOtherObject
實例。在添加實例之前,它首先檢查該密鑰是否已經存在,然後將數據追加到分配給該密鑰的實例,而不是覆蓋它。
class MyClass:
def __init__(self):
self.myLibrary = {}
def __setitem__(self, key, item):
if key not in self.myLibrary:
self.myLibrary[key] = myOtherObject(name=item[0], attr1=[item[1]], attr2=[item[2]])
else:
self.myLibrary[key].attr1.append(item[1])
self.myLibrary[key].attr2.append(item[2])
def __getitem__(self, key):
if key in self.myLibrary:
return self.myLibrary[key]
else:
return None #???
從庫中檢索數據時,應該檢查是否存在關鍵太強了,如果鍵只存在返回分配的對象。
>>> o = MyClass()
>>> o['key1'] = ['name1','b','c']
>>> o['key1']
<__main__.myOtherObject instance at 0x05509B48>
>>> o['key1'].attr1
'b'
>>> o['key2']
>>> o['key2'].attr1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'attr1'
我能以某種方式告訴Python中沒有做任何事情,當屬性attr1
和attr2
從'NoneType' object
稱爲只返回None
:調用該對象的屬性時,也能正常工作或致電只是對象,但不是?
我試過defaultdict。問題是我的myOtherObject有超過10個屬性和幾個方法 - 在這裏它只是簡化。所以爲了使它與deafultdict一起工作,我需要至少三個級別的每個鍵的列表。這太令人困惑了,所以我想要屬性被命名的對象。 – Banana
基本上我希望能夠通過o ['key']。attr檢索和賦值(並使用方法),但只有當o ['key']存在時。也許我會被迫在使用/分配它之前檢查密鑰是否存在於我的主類之外。 – Banana
@ totoro2絕對沒有任何一個暗示你需要多層次的列表。你的問題並沒有真正揭示你想要解決什麼問題,但我幾乎肯定你正在採取錯誤的方針。 – Marcin