2014-01-21 5 views
1

Я работаю над проектом, и я запускаю Python 2.7 и Panda3D v1.8.1. Я не смог узнать, как получить доступ к переменной, которая была определена в функции. Для установки у меня два файла. Один файл управляет событиями, а второй загружает файлы. Вот пример того, что у меня есть:Доступ к переменной, определенной внутри функции Python

class secondFile(object): 

    def create_something(self): 

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

В моем первом файле я хочу, чтобы иметь возможность получить доступ к переменной, так что я могу вызвать функцию, когда мой персонаж сталкивается с ним. Я читал другие подобные вопросы, но ни один из ответов не работал на то, что я пытался сделать.

DO = DirectObject() 

def collideEventIn(): 
    print "Collision" 

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

Я попытался это:

class secondFile(object): 

    def create_something(self): 

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

Главный файл:

DO = DirectObject() 

variable = secondFile().create_something.variable 

def collideEventIn(): 
    print "Collision" 

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

Однако оно не похоже на работу.

ответ

1

Не уверен, правильно ли я правильно истолковал ваш вопрос, но почему бы вам просто не вернуть переменную?

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

И получить к нему доступ в variable:

variable = secondFile().create_something() 

Если вы хотите, чтобы это было больше похоже на ООП, вы должны неизбежно variable к себе:

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

А потом, доступ его:

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

Спасибо, это было как раз то, что я был находясь в поиске. – Chandler

0

Ваша переменная не может быть сохранена в функции. Переменные внутри функций недоступны снаружи. Но переменные вне (например, в классе) доступны внутри функции. Так что вы хотите self.variable

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

Тогда любая другая функция в классе, или любой код ссылки на экземпляр, можно получить доступ к его self.variable или thesecondfile.variable (при условии thesecondfile = secondFile())

Смежные вопросы