那麼有可能只獲取最特定類的屬性的字典/列表?到目前爲止,我正在使用python只獲得類屬性沒有超類
for attr, value in obj.__class__.__dict__.iteritems():
但是,這也會給我在超類定義的屬性。有什麼辦法可以避免這種情況?
那麼有可能只獲取最特定類的屬性的字典/列表?到目前爲止,我正在使用python只獲得類屬性沒有超類
for attr, value in obj.__class__.__dict__.iteritems():
但是,這也會給我在超類定義的屬性。有什麼辦法可以避免這種情況?
類有一個用字典對象實現的名字空間。類 屬性引用被翻譯爲本字典中的查找,例如,Cx被翻譯爲C .__ dict __ [「x」](儘管對於新式 類特別存在一些鉤子,其允許 其他手段定位屬性)。當屬性名是沒有找到 ,屬性搜索的基類
換句話說繼續,__dict__包含類的只是「局部」的屬性,超類的屬性存儲在超__dict__。
因此,您可以使用__class__.__dict__.iteritems()
來僅檢索類屬性。
它不顯示我的父類的屬性:
>>> class A(object):
def a(self):
print a
b = 3
>>> a = A()
>>> dir(a)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b']
>>> list(a.__class__.__dict__)
['a', '__module__', 'b', '__dict__', '__weakref__', '__doc__']
__module__
,__dict__
,__weakref__
,__doc__
似乎是在默認情況下每個類創建的屬性。
的默認屬性此列表不同的舊式類:
>>> class B:
pass
>>> list(B().__class__.__dict__)
['__module__', '__doc__']
如果你想獲得的所有類的屬性和它們的值,包括繼承類的字典,那麼你可能需要使用下面的代碼:
cls_dict = { attr: getattr(obj.__class__, attr)
for attr in dir(obj.__class__) }
for attr, val in cls_dict.iteritems():
logging.info("%s = %s", attr, val)