class a:
def set(self, value):
print value+1
def set2(self, value):
self.set(value)
class b(a):
def set(self, value):
print value
if __name__ == '__main__':
i = b()
i.set2(10)
执行时,我得到结果为10
,这意味着b.set()
被调用,但为什么不a.set()
,因为它是用explict self
调用的?
P.S。 那么,即使类'a'没有方法set(),这段代码仍然有用吗?但这是一个很好的编码规则吗?
答案 0 :(得分:3)
你在派生类中覆盖set()
,这就是self.set()
调用的内容。
要调用a
的方法,您可以使用以下语法:
a.set(self, value)
答案 1 :(得分:2)
当您致电self.set(value)
时,无论您在何处呼叫,它始终会为set()
提供相同的定义。
class Animal(object):
def interact(self):
print('I am a {}, I say "{}"'.format(self.name(), self.speak()))
class Dog(Animal):
def name(self):
return 'dog'
def speak(self):
return 'woof'
如果您愿意,可以明确致电a.set()
。
class A(object):
def set(self, value):
print(value + 1)
def set2(self, value):
A.set(self, value)
然而,这有点傻。这个例子非常抽象,你不能用它来找出好的编码风格。
答案 2 :(得分:0)
在您的情况下,如果您想要调用a
的{{1}},则需要使用以下语法。 set()