Python类从父类运行方法,但保留变量

时间:2017-11-11 17:16:32

标签: python python-3.x class inheritance

我有一个python类和一个父类。

class A:
    def foo(self, num):
        num1 = num + 3
        print(num1)

class B(A):
    def foo(self, num):
        super().foo(num)
        num2 = num1+3
        print(num2)

当孩子在super().food(num)中调用它以便稍后在其自己的方法版本中使用时,孩子的方法是否可以保持变容器不受父方法的影响。

或者有更好的方法可以附加到父母方法的副本吗?

编辑:我的实际课程要比这复杂得多。我只是以此为例。我正在制作一个IRC机器人,并想要一个基础对象,其他机器人可以基于。 (因此有些方法会在某些机器人中添加部件)

4 个答案:

答案 0 :(得分:4)

在Python中,您在成员函数中分配的变量不仅仅是继承树中该类的本地变量;它们甚至不能用于同一类的其他方法,或者稍后再次调用它时也不能用于该成员函数。换句话说,它们只是正常的局部变量。要分配给对象成员变量,必须显式指定对象

class A:
    def foo(self, num):
        self.num1 = num + 3
        print(self.num1)

class B(A):
    def foo(self, num):
        super().foo(num)
        self.num2 = self.num1+3
        print(self.num2)

答案 1 :(得分:2)

您可以将num1定义为实例变量,然后您就可以在B类中使用它。

class A(object):
    def foo(self, num):
        self.num1 = num + 3
        print(self.num1)

class B(A):
    def foo(self, num):
        super(B, self).foo(num)
        num2 = self.num1 + 3
        print(num2)

https://docs.python.org/2/tutorial/classes.html#class-and-instance-variables

答案 2 :(得分:1)

这个方法是你想在返回时使用父变量。但是我会使用@Arthur Tacca,它会好一些。

class A:
    def foo(self, num):
        num1 = num + 3
        return num1 

class B(A):
    def foo(self, num):
        num1 = super().foo(num)
        num2 = num1+3
        print(num2)
G = B().foo(4)

答案 3 :(得分:1)

我认为你想要init函数。最终它取决于你在做什么。您可能需要一个抽象类或接口来承诺子类中的某些行为。很难说。对于这个问题,我会这样做,以便使用所有foo的属性构建bar

class  foo:
  def __init__(self, num1=3):
    self.num1 =num1

class bar(foo):
  def __init__(self, num2 = 3):
    foo.__init__()
    self.num2 = self.num1 + num2