Search code examples
pythonclassattributes

update the value of an empty attribute class using a method


Does anyone know how to update the value of an empty class instance in a method? My code does not work as expected.

class addition:
    def __init__(self):
        self.number = None
    def add(self, data):
        
        if self.number == None:
            print('no')
            self.number = data
        else:
            print('yes')
            self.number + 10
        return self.number 

addition().add(4)
addition().add(5)

With addition().add(5) I want self.number to be equal to 4 but it stays equal to none. Please help!


Solution

  • You should either instantiate an object of your class or use a class method.

    When you use a non static class, the members of your class receive the self identifier, meaning that they belong to that specific instance, that needs to be created. Like:

    class addition:
        def __init__(self):
            self.number = None
        def add(self, data):
            
            if self.number == None:
                print('no')
                self.number = data
            else:
                print('yes')
                self.number + 10
            return self.number 
    
    addition1 = addition()
    addition1.add(4)
    addition1.add(5)
    

    Otherwise, you can use a variable as a member of the class itself and declare the method a class method, then you don't need to instantiate an object and can call it directly. With a class method you don't use the word self, because you don't have an instance. Instead, you use (by convention) the word cls, referring to the class. Example:

    class addition:
        number = None
        
        @classmethod    
        def add(cls, data):
            
            if cls.number == None:
                print('no')
                cls.number = data
            else:
                print('yes')
                cls.number + 10
            return cls.number 
    
    addition.add(4)
    addition.add(5)