我已經和與僞或特殊屬性,可以在三種不同的方式來命名對象(注:我不控制它生成對象的代碼)越來越動態屬性在Python
的(取決於哪一個設置)中的屬性值是完全一樣的,我需要得到進一步的處理,所以要根據數據的來源,我可以有這樣的:
>>> obj.a
'value'
>>> obj.b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'b'
>>> obj.c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'c'
或
>>> obj.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'a'
>>> obj.b
'value'
>>> obj.c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'c'
或
>>> obj.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'a'
>>> obj.b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'b'
>>> obj.c
'value'
我感興趣的是得到'value'
可惜__dict__
財產在對象不存在。所以我最終爲了獲得這個價值而做的只是做了一堆getattr
的調用。假設可能性只有三個,代碼是這樣的:
>>> g = lambda o, l: getattr(o, l[0], getattr(o, l[1], getattr(o, l[2], None)))
>>> g(obj, ('a', 'b', 'c'))
'value'
現在,我想知道是否有這更好的辦法?正如我100%相信我做了什麼:)提前
感謝
只是爲了檢查 - 沒有一個'get_value()'(或類似的),或者你提到'取決於數據源' - 沒有現有的(或可導出的映射)源 - >屬性名稱? –