为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以从子类的方法中更改超类变量并在另一个子类中使用它?

是否可以从子类的方法中更改超类变量并在另一个子类中使用它?

猛跑小猪 2022-11-09 17:24:40
已编辑: Dou 对@Prune 评论我已编辑问题我有一个主类作为超类,并且有许多类从它扩展。我想从子类内部的方法更改超类的变量并在另一个子类中使用它。假设:class MainClass:    def __init__(self):        self.test = 'GOOGLE'   # This is a variable    def plus(x, y):        return x + yclass SubClassOne(MainClass):    def __init__(self):        super().__init__()    def substract(self, x, y):        return x + y        self.test = 'YAHOO'    # Here I'm trying to change the 'test'class SubClassTwo(MainClass):    def __init__(self):        super().__init__()    def multiply(self, x, y):        print(self.test)      # Here I'm printing the 'test' and I want to have it with 'YAHOO' value        return x * yrun = SubClassTwo()run.multiply(2,5)1-查看self.test = 'GOOGLE'SuperClass 初始化中的变量。2-然后我在SubClassOne.substract()中将其更改为self.test = 'YAHOO'.3- 我self.test在 SubClassTwo 中使用以达到来自 SubClassOne 的更改。意味着如果我打印它,我想YAHOO在输出中。但实际输出是 GOOGLE我应该怎么办?
查看完整描述

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))

你会得到一个运行时错误:runhas no method named substract-- runis of type SubClassTwo,它没有这样的方法。 substract只是 SubClassOne 的一个方法。


很简单,你需要确定你想让你的对象做什么,然后编写相应的 Python 结构来匹配。由于您没有告诉我们足够多的有关您想要的操作,我们无法更改您发布的代码以匹配。简单地设置一个实例属性只需要一个类,而不是三个。


查看完整回答
反对 回复 2022-11-09
?
哔哔one

TA贡献1854条经验 获得超8个赞

你不能得到第二个类YAHOO的输出,self.test类的属性和方法是这样工作的:B继承自A,当你创建一个对象时,你尝试执行该对象的方法或类,它将在首先是 A 类,然后是 B 类,所以如果它没有在 B 中重新声明,它将显示 A 的那个,这就是在你的情况下发生的情况,属性self.test没有重新声明,SubClassTwo所以它正常显示GOOGLE为输出,你有在该子类上重新定义它



查看完整回答
反对 回复 2022-11-09
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您可以SubClassTwo继承自SubClassOne,因为它还将继承该覆盖行为:


class SubClassTwo(SubClassOne):

    def multiply(self, x, y):

        print(self.test)  # prints "YAHOO"

        return x * y


查看完整回答
反对 回复 2022-11-09
  • 3 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信