0
有一些類的。每個類可能會定義一個類變量(具體而言,它是一個字典),它們都具有相同的變量名稱。給定一個子類的實例,我希望根類能夠以某種方式訪問所有這些變量(即所有連接在一起的字典)。我似乎無法找到辦法。無論我嘗試什麼,我都會被卡住,因爲我無法檢索給定子類的直接父類。這如何實現?如何聚合類層次結構的所有屬性?
有一些類的。每個類可能會定義一個類變量(具體而言,它是一個字典),它們都具有相同的變量名稱。給定一個子類的實例,我希望根類能夠以某種方式訪問所有這些變量(即所有連接在一起的字典)。我似乎無法找到辦法。無論我嘗試什麼,我都會被卡住,因爲我無法檢索給定子類的直接父類。這如何實現?如何聚合類層次結構的所有屬性?
只要您使用的是新風格的類(即object
或某些其他內置類型是「最深的祖先」),則可以使用__mro__
。例如,給定:
>>> class Root(object):
... d = {'za': 23}
...
>>> class Trunk(Root):
... d = {'ki': 45}
...
>>> class Branch(Root):
... d = {'fu': 67}
...
>>> class Leaf(Trunk, Branch):
... d = {'po': 89}
現在
,
>>> def getem(x):
... d = {}
... for x in x.__class__.__mro__:
... d.update(x.__dict__.get('d',()))
... return d
...
>>> x = Leaf()
>>> getem(x)
{'za': 23, 'ki': 45, 'po': 89, 'fu': 67}
完美!正是我在找什麼。謝謝。 – 2009-09-04 20:46:24