0
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

PS 所以,即使类 'a' 没有方法 set(),这段代码仍然有效吗?但这是一个好的编码规则吗?

4

3 回答 3

3

set()在派生类中重写,所以这就是self.set().

要调用a's 方法,可以使用以下语法:

    a.set(self, value)
于 2013-03-06T09:23:16.453 回答
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)

然而,这有点愚蠢。这个例子太抽象了,你不能用它来找出好的编码风格。

于 2013-03-06T09:23:33.000 回答
0

在您的情况下,如果您想调用a's set(),您需要使用以下语法。 a().set(10)

于 2013-03-06T09:37:15.400 回答