【问题标题】:Python class run method from parent, but keep variablesPython类从父类运行方法,但保留变量
【发布时间】:2018-04-24 17:43:50
【问题描述】:

我有一个 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 机器人,并且想要一个其他机器人可以基于的基础对象。 (因此某些方法会在某些机器人中添加部分)

【问题讨论】:

    标签: python python-3.x class inheritance


    【解决方案1】:

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

    【讨论】:

    • 所以我在父项中找到return num1,然后在子项中找到num1=super().food(num)?
    • 是的,你可以这样做,但这种方法肯定更好。
    【解决方案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

    【讨论】:

      【解决方案3】:

      这个方法是如果你想在返回时使用父变量。但我会使用@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)
      

      【讨论】:

        【解决方案4】:

        我想你想要这个的 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
        

        【讨论】:

          猜你喜欢
          • 2012-10-28
          • 2019-01-28
          • 1970-01-01
          • 2012-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-07
          • 1970-01-01
          相关资源
          最近更新 更多