从超类中调用子类中的类似命名函数

时间:2018-03-16 15:46:35

标签: python class oop

来自this question的跟进,其配方不是很好。答案提供了一些额外的见解,所以现在我构建了一个有限的工作示例,可以更好地解释它。

基本上我们有两个子类AB以及一个继承自两者的类C。类AB都有一个函数MyFunc,但它会执行不同的操作。

我希望类C能够使用这两个函数并完全控制调用哪个函数,因为我希望对每个函数执行不同的操作。下面有限的工作示例中的评论显示了我想要做的事情。

class A():
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2
    def MyFunc(self):
        result = self.var1 + self.var2
        return result

class B():
    def __init__(self, var1):
        self.var1 = var1
    def MyFunc(self):
        result = self.var1**2
        return result

class C(A,B):
    def __init__(self, var1, var2, var3):
        A.__init__(self, var1, var2)
        B.__init__(self, var3)
    def MyFunc(self):
        #in this function I want to call MyFunc from A and MyFunc from B. For example to add their results together

如何在MyFunc中的AMyFuncBMyFunc中的C拨打GoogleSignInAccount signInAccount = GoogleSignIn.getLastSignedInAccount(GoogleDriveActivity.this); DriveClient mDriveClient = Drive.getDriveClient(getApplicationContext(), signInAccount); DriveResourceClient mDriveResourceClient = Drive.getDriveResourceClient(getApplicationContext(), signInAccount);

由于

2 个答案:

答案 0 :(得分:2)

您可以使用名称修改来创建子类中可用类的属性,即使该子类定义了具有相同名称的属性。

class A():
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2
    def __MyFunc(self):
        result = self.var1 + self.var2
        return result
    MyFunc = __MyFunc

class B():
    def __init__(self, var1):
        self.var1 = var1
    def __MyFunc(self):
        result = self.var1**2
        return result
    MyFunc = __MyFunc

class C(A,B):
    def __init__(self, var1, var2, var3):
        A.__init__(self, var1, var2)
        B.__init__(self, var3)
    def MyFunc(self):
        return self._A__MyFunc() + self._B__MyFunc()

c = C(1, 2, 3)
print(c.MyFunc())
# 14

答案 1 :(得分:0)

我尝试使用您的示例建议尽可能简化解决方案。

    def MyFunc(self):
        result = 0
        result += A.MyFunc(self=self)
        result += B.MyFunc(self=self)
        return result