2014-11-13 2 views
1

Итак, я искал и не мог найти ответ. Я хочу изменить параметры из объекта, созданного в моем основном файле, в модуле. Например, я проверяю это с простым куском кода здесь:Как изменить параметры объекта класса из другого модуля (python)

-Этот мой главным файл, из которого я создаю объекты и определить некоторые свойства

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() 

-Это модуль, из которого я хочу использовать функции для изменения атрибутов в главном файле

from class_test_1 import dog 

def class_test(): 
    fido.add_spots() 

-SO мой вопрос, как я могу это сделать/почему не этот кусок кода выше работы? Выполняя основную функцию самостоятельно показывает, что пятна fido увеличиваются на 1 каждый раз при ее печати. Однако выполнение кода, вызывающего модуль, дает NameError, поэтому мой модуль не распознает класс, хотя мне удалось его импортировать. Заранее благодарю за любую помощь.

+0

Почему вы думаете, что импорт «собаки» дает вам доступ к 'fido'? Это определяется только в 'main', который даже не запускается при импорте. Кроме того, знаете ли вы, что они не являются атрибутами экземпляра класса? И почему круговой импорт? – jonrsharpe

+0

Так нет способа импортировать объект с его свойствами в целости и сохранности в любой момент времени? Скажем, в середине моей основной функции я хочу проверить значение переменной, привязанной к объекту, но я хочу выполнить эту проверку из модуля. Я просто хочу сэкономить место в моей основной функции ... – user4218818

+0

Конечно, не используя импорт. Пропустите явно, это намного проще. – jonrsharpe

ответ

1

Ваша переменная «fido» определяется только в вашей «основной» функции. Вы должны предоставить свою функцию «class_test» переменной.

Например:

class_test_2.class_test(fido) 

class_test Тогда ваша функция получает аргумент. Вы можете свободно выбирать имя. Я использовал the_dog в примере:

def class_test(the_dog): 
    the_dog.add_spots() 

В этом случае the_dog указывает на тот же экземпляр вашего dog класса как fido.