Search code examples
pythonclassvariables

Changing instance variables


I have this code:

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

Now, while running:

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

I want it to print out:

Yes
No
No, but yes
Yes, but no

It gives me:

Yes
No
Yes
No

I know the reason is that I'm only changing the value of self.a in the No class. Is there any way to change it in the Yes class while still in the No class (like if there was something that I could plug in in place of the self.a-=1 that would work)?


Solution

  • I'm not sure what possible use you have for this, but...

    You want to manipulate a class variable, but you keep addressing instance variables. If you want a class variable, use a class variable!

    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