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