Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Return class object after changing object variables

Im new to OOP in Python (and in general) and wondering about the correct way to change object variables. Since Python cant return void i need to return something when an object variable has changed.

class classA:
   var_a = 1
   var_b = 1

def changeSomething(classAObj):
    classAObj.var_a = 2
    return classAobj

def main()
    classAObj = classA()
    changeSomething(classAObj)
    .....use object with new changes here....

Is it correct to return the entire classAObj in the changeSomething function? Or should i only return the variable i.e

...
return classAobj.var_a

I get the same result in either way, classAObj.var_a has changed in both cases, but what is the correct way to do it?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

changeSomething should not return anything; when it modifies the argument in place, it should return nothing (implicitly None). Only functions that make new modified copies should return them (and leave the argument unmodified).

So your code should just be:

class classA:
   def __init__(self):
       self.var_a = 1  # You forget self here
       self.var_b = 1  # You forget self here

def changeSomething(classAObj):
    classAObj.var_a = 2  # Fix name, self wouldn't exist, you received it by a different name

def main():
    classAObj = classA()
    changeSomething(classAObj)  # classAObj is modified in place, so changes seen in caller
    # .....use object with new changes here....

Or, given this is a class, it makes sense to have changeSomething be an instance method, e.g.:

class classA:
   def __init__(self):
       self.var_a = 1  # You forget self here
       self.var_b = 1  # You forget self here

    # Indented to make it a method of the class
    def changeSomething(self):  # Argument renamed to follow standard naming for instance methods
        self.var_a = 2

def main():
    classAObj = classA()
    classAObj.changeSomething()  # Use method call syntax, classAObj still modified in place
    # .....use object with new changes here....
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading