Python3,OOP:将多个类继承到单个类中

2024-09-28 18:55:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我从多个父类继承到一个类中。我要做的是使对象数据发生冲突。你知道吗

我的意思是,如果两个类持有一个名称相同、数据不同的变量,如果该变量出现在图片中,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的数据?请不要建议我改变继承顺序。你知道吗

谢谢你。你知道吗


Tags: 数据selfvarclasspacsumprintcac
3条回答

你可以设置self.var2=cac.var2在newclass的init方法中:

class newclass(pac, cac):
    def __init__(self):
        self.var2 = cac.var2

还可以使用以下代码返回可能值的列表/元组:

@property
    def var2(self):
        key='var2'
        return [getattr(c,key) for c in self.__class__.mro()[1:-1] if hasattr(c,key)]

mro方法返回一个类列表,第一个类是调用者类,后面是父类,最后是object内置类。 此代码将按继承顺序返回值列表。你知道吗

在不改变继承顺序的情况下,您的子类将始终从第一个类中获得它可以在第一个类中找到的属性。如果您想找出第二个类中对应的值是什么,就必须显式地请求第二个类的值。你知道吗

对你来说

class newclass(pac,cac):
    @property
    def var2(self):
        return cac.var2

注意,我显式地要求cac的var2。你知道吗

相关问题 更多 >