2

我有以下代码段:

class A:
    def __init__(self):
        self.state = 'CHAT'

    def method1(self):
        self.state = 'SEND'

    def printer(self):
        print self.state


class B(A):
    def method2(self):
        self.method1()
        print self.state

ob_B = B()
ob_A = A()
ob_B.method2()
ob_A.printer()

这给了我输出:

SEND
CHAT

我希望它打印:

SEND
SEND

也就是说,当B.method2通过调用self.method1修改self.state时,我希望它修改self.state = 'CHAT'A的实例中已经存在的值。我怎样才能做到这一点?

4

3 回答 3

4

实例作为第一个参数传递给每个方法,self实例也是如此。您正在设置实例属性而不是类变量。

class A:

    def __init__(self):
        A.state = 'CHAT'

    def method1(self):
        A.state = 'SEND'

    def printer(self):
        print A.state


class B(A):
    def method2(self):
        self.method1()
        print B.state

ob_B = B()
ob_A = A()
ob_B.method2()
ob_A.printer()

SEND
SEND
于 2013-04-26T10:25:00.553 回答
0
ob_B = B()
ob_A = A()
ob_B.method2()
ob_A.printer()

您需要调用 ob_B.method2() - 没有括号,该语句只是对函数的引用,实际上并没有调用它。

于 2013-04-26T10:25:07.293 回答
0

您可以使用 B 的对象调用 printer() 方法,以便获得更新后的值。

ob_B = B()
ob_A = A()
ob_B.method2()
ob_B.printer()
于 2013-04-26T10:28:32.990 回答