2017-11-11 149 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