Python的改变类变量(Python changing class variables)

2019-08-19 06:36发布

好吧,我会尽力,并非常清楚这个时候。

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

现在,我知道的原因是因为我只在无级改变Self.a的值(记住,行?)。 我想知道是否有无论如何在无类(如好像有什么事,我可以插入到位self.a- = 1,将工作的)来改变它的是类,同时还。

Answer 1:

我不知道你有什么可能利用这一点,但...

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

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


Answer 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


文章来源: Python changing class variables