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

已编辑: Dou 对@Prune 评论我已编辑问题


我有一个主类作为超类,并且有许多类从它扩展。


我想从子类内部的方法更改超类的变量并在另一个子类中使用它。


假设:


class MainClass:

    def __init__(self):

        self.test = 'GOOGLE'   # This is a variable


    def plus(x, y):

        return x + y



class 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 * y



run = SubClassTwo()

run.multiply(2,5)


1-查看self.test = 'GOOGLE'SuperClass 初始化中的变量。


2-然后我在SubClassOne.substract()中将其更改为self.test = 'YAHOO'.


3- 我self.test在 SubClassTwo 中使用以达到来自 SubClassOne 的更改。


意味着如果我打印它,我想YAHOO在输出中。但实际输出是 GOOGLE


我应该怎么办?


猛跑小猪
浏览 88回答 3
3回答

不负相思意

您的设计假设存在严重缺陷: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 结构来匹配。由于您没有告诉我们足够多的有关您想要的操作,我们无法更改您发布的代码以匹配。简单地设置一个实例属性只需要一个类,而不是三个。

哔哔one

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

幕布斯6054654

您可以SubClassTwo继承自SubClassOne,因为它还将继承该覆盖行为:class SubClassTwo(SubClassOne):    def multiply(self, x, y):        print(self.test)  # prints "YAHOO"        return x * y
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python