3
確定哪個Python類在繼承時定義屬性的最簡單方法是什麼?例如,假設我有:如何確定哪個Python類在繼承時提供屬性
class A(object):
defined_in_A = 123
class B(A):
pass
a = A()
b = B()
,我想這個代碼傳遞:
assert hasattr(a, 'defined_in_A')
assert hasattr(A, 'defined_in_A')
assert hasattr(b, 'defined_in_A')
assert hasattr(B, 'defined_in_A')
assert defines_attribute(A, 'defined_in_A')
assert not defines_attribute(B, 'defined_in_A')
我將如何實現虛構defines_attribute
功能?我的第一個想法是遍歷整個繼承鏈,並使用hasattr
來檢查屬性的存在,最深的匹配被認爲是定義者。有一種更簡單的方法嗎?
這是什麼實際使用情況? – jonrsharpe
'if'defined_in_A'not in vars(B)'可能就是你正在尋找的東西,只檢查在該對象上定義的實例變量而不檢查它的基數或類型。 –