2017-11-11 152 views
3

我有一个python类和一个父类。从父类运行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) 

是否有可能使孩子的方法,以保持从父母方法varables,当它调用它super().food(num)在其自己版本的方法以后使用。

或者有没有更好的方法来追加到您的父母方法的副本?

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

回答

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

所以我cound'回报num1'的父母,然后在孩子'NUM1 =超()。食物(NUM)'? –

+0

是的,你可以做到这一点,但这种方法肯定是一个更好的方法。 – Gumboy

1

,如果你想使用父变量时returned.But我会用@Arthur蒟蒻这种方法,这是一个好一点。

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

我想你想为此的init函数。最终它取决于你在做什么。您可能需要一个抽象类或一个承诺在子类中具有某些行为的接口。这很难说。对于这个问题,这样的酒吧是所有富的构造,我会做这样的属性

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