11

好的,这次我会尽量说清楚。

class Yes:

    def __init__(self):
        self.a=1

    def yes(self):
        if self.a==1:
            print "Yes"
        else:
            print "No, but yes"

class No(Yes):

    def no(self):
        if self.a==1:
            print "No"
        else:
            print "Yes, but no"
        self.a-=1 #Note this line

现在,在运行时:

Yes().yes()
No().no()
Yes().yes()
No().no()

我希望它打印出来:

Yes
No
No, but yes
Yes, but no

它给了我:

Yes
No
Yes
No

现在,我知道原因是因为我只是在 No 类中更改 Self.a 的值(还记得那行吗?)。我想知道是否有任何方法可以在 Yes 类中更改它,而仍在 No 类中(例如,如果我可以插入一些可以代替 self.a-=1 的东西)。

4

2 回答 2

20

我不确定您对此有什么可能的用途,但是...

你想操作一个变量,但你一直在处理实例变量。如果你想要一个类变量,使用一个类变量!

class Yes:
    a = 1 # initialize class var.
    def __init__(self):
        self.a = 1 # point of this is what?

    def yes(self):
        if Yes.a==1: # check class var
            print "Yes"
        else:
            print "No, but yes"

class No(Yes):

    def no(self):
        if Yes.a==1: # check class var
            print "No"
        else:
            print "Yes, but no"
        Yes.a-=1 # alter class var
于 2013-04-03T14:51:40.447 回答
2

看来您要使用的是静态变量而不是实例变量。静态变量在类的所有实例之间共享。

class Yes:
    a = 1
    def __init__(self):
        pass

    def yes(self):
        if Yes.a==1:
            print "Yes"
        else:
            print "No, but yes"

class No(Yes):

    def no(self):
        if Yes.a==1:
            print "No"
        else:
            print "Yes, but no"
        Yes.a-=1 #Note this line

Yes().yes()
No().no()
Yes().yes()
No().no()

将输出:

Yes
No
No, but yes
Yes, but no
于 2013-04-03T14:52:28.433 回答