3 回答
TA贡献1777条经验 获得超10个赞
您的设计假设存在严重缺陷:
3- 我在 SubClassTwo 中使用 self.test 来实现来自 SubClassOne 的更改。
不,你没有。SubClassTwo 和 SubClassOne 是同级子类。 self.test
在 SubClassTwo 中指test
的是 SubClassTwo 实例的属性;SubClassOne 不是这个谱系的任何部分。SubClassTwo仅从MainClass 继承。test
对 SubClassOne 实例的属性的更改不会自动影响 SubClassTwo 实例。
在您对旧答案的评论中,我看到您的问题可能是什么:
运行时的方法是按顺序连续的,ClassOne 然后 Class Two
您声明了两个相互独立的子类,而不是方法。 substract()
[原文如此] 并且multiply
是两个不同类的方法。例如,如果您在发布代码的末尾尝试,
print(run.substract(5, 2))
你会得到一个运行时错误:run
has no method named substract
-- run
is of type SubClassTwo,它没有这样的方法。 substract
只是 SubClassOne 的一个方法。
很简单,你需要确定你想让你的对象做什么,然后编写相应的 Python 结构来匹配。由于您没有告诉我们足够多的有关您想要的操作,我们无法更改您发布的代码以匹配。简单地设置一个实例属性只需要一个类,而不是三个。
TA贡献1854条经验 获得超8个赞
你不能得到第二个类YAHOO
的输出,self.test
类的属性和方法是这样工作的:B继承自A,当你创建一个对象时,你尝试执行该对象的方法或类,它将在首先是 A 类,然后是 B 类,所以如果它没有在 B 中重新声明,它将显示 A 的那个,这就是在你的情况下发生的情况,属性self.test
没有重新声明,SubClassTwo
所以它正常显示GOOGLE
为输出,你有在该子类上重新定义它
TA贡献1876条经验 获得超7个赞
您可以SubClassTwo继承自SubClassOne,因为它还将继承该覆盖行为:
class SubClassTwo(SubClassOne):
def multiply(self, x, y):
print(self.test) # prints "YAHOO"
return x * y
添加回答
举报