user4218818
user4218818

Reputation: 31

How to change class object parameters from another module (python)

So I've searched around and couldn't find an answer. I'm looking to change parameters from an object created in my main file, in a module. For example, I'm testing this with a simple piece of code here:

-this is my main file, from which i create the objects and define some properties

import class_test_2

class dog():
    name=''
    spots=0

    def add_spots(self):
        self.spots+=1

def main():

    fido=dog()
    fido.name='Fido'

    print('Fido\'s spots: ',fido.spots)

    fido.add_spots()

    print('Fido\'s spots: ',fido.spots)

    class_test_2.class_test()

    print('Fido\'s spots: ',fido.spots)


if __name__=='__main__':
    main()

-this is the module, from which I want to use functions to change the attributes in the main file

from class_test_1 import dog

def class_test():
    fido.add_spots()

-So my question is how can I do this/why doesn't this piece of code above work? Running the main function on its own shows fido's spots increasing by 1 each time its printed. Running the code calling the module however gives a NameError so my module isn't recognising the class exists even though I've managed to import it. Thanks in advance for any help.

Upvotes: 3

Views: 3246

Answers (1)

FlorianLudwig
FlorianLudwig

Reputation: 324

Your variable "fido" is only defined within your "main" function. You must provide your "class_test" function with the variable.

For example:

 class_test_2.class_test(fido)

Then your class_test function gets an argument. You can choose the name freely. I used the_dog in the example:

def class_test(the_dog):
    the_dog.add_spots()

In this case the_dog points to the same instance of your dog class as fido.

Upvotes: 1

Related Questions