Question

I am working on a project and I am running Python 2.7 and Panda3D v1.8.1. I have been unable to find out how to access a variable that was defined in a function. For the setup I have two files. One file manages events and the second file loads models. Here is an example of what I have:

class secondFile(object):

    def create_something(self):

        variable = loader.loadModel('myModel.bam')
        variable.setPos(123,1231,5)

In my first file I want to be able to access the variable so I can call a function when my character collides with it. I was reading other similar questions but none of the answers seemed to work for what I was trying to do.

DO = DirectObject()

def collideEventIn():
    print "Collision"

collisionHandler.addInPattern('%fn-into-%in')
DO.accept('character-into-variable', collideEventIn)

I have tried this:

class secondFile(object):

    def create_something(self):

        create_something.variable = loader.loadModel('myModel.bam')
        create_something.variable.setPos(123,1231,5)

Main file:

DO = DirectObject()

variable = secondFile().create_something.variable

def collideEventIn():
    print "Collision"

collisionHandler.addInPattern('%fn-into-%in')
DO.accept('character-into-variable', collideEventIn)

However it didnt seem to work.

Was it helpful?

Solution

Not sure if i'm interpreting your question correctly, but why don't you just return the variabe?

def create_something(self):
    variable = loader.loadModel('myModel.bam')
    variable.setPos(123,1231,5)
    return variable

And to access it in variable:

variable = secondFile().create_something()

If you want it to be more like OOP, you should bound variable to self:

def create_something(self):
    self.variable = loader.loadModel('myModel.bam')
    self.variable.setPos(123,1231,5)

And then, to access it:

SF = secondFile()
SF.create_something()
variable = SF.variable

OTHER TIPS

Your variable cannot be stored in the function. Variables inside functions are not accessible outside. But variables outside (such as in the class), are accessible inside the function. So what you want is self.variable

def create_something(self):
    self.variable = loader.loadModel('myModel.bam')
    self.variable.setPos(123,1231,5)

Then any other function in the class, or any code referencing an instance, can access it by self.variable or thesecondfile.variable (assuming thesecondfile = secondFile())

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top