我将多个父类继承到一个类中。我想要做的是使对象数据冲突的情况。
我的意思是,如果两个类包含一个具有相同名称和不同数据的变量,那么如果该变量出现在图片中,哪些数据将由Python加载?
我做了什么
>>> class pac:
... var=10
... var2=20
...
>>> class cac:
... var3=30
... var2=10
...
>>> pob=pac()
>>> cob=cac()
>>> pob.var
10
>>> pob.var2
20
>>> cob.var2
10
>>> cob.var3
30
>>> class newclass(pac,cac):
... def sum(self):
... sum=self.var+self.var2
... sum2=self.var2+self.var3
... print(sum)
... print(sum2)
...
30
50
>>> nob.var
10
>>> nob.var2
20
>>> nob.var3
30
>>>
似乎var2
数据会从父类中考虑:pac
而不是cac
类。
如果相同的变量名存在不同的数据,那么需要做些什么才能让Python考虑来自cac
而不是pac
的数据?请不要建议我改变继承顺序。
谢谢。
答案 0 :(得分:2)
在不改变继承顺序的情况下,您的子类将始终从第一个类中获取它可以在第一个类中找到的属性。如果你想知道第二堂课的相应价值是什么,你就必须明确要求第二堂课的价值。
在你的情况下,像
class newclass(pac,cac):
@property
def var2(self):
return cac.var2
请注意,我明确要求cac
< var 2。
答案 1 :(得分:2)
您可以在newclass的 init 方法中设置self.var2 = cac.var2:
class newclass(pac, cac):
def __init__(self):
self.var2 = cac.var2
答案 2 :(得分:1)
您还可以使用以下代码返回可能值的列表/元组:
@property
def var2(self):
key='var2'
return [getattr(c,key) for c in self.__class__.mro()[1:-1] if hasattr(c,key)]
mro
方法返回一个类列表,第一个是调用者类,后面是父类,最后是object
内置类。
此代码将按继承顺序返回值列表。