Как получить данные переменной из одного класса в другой класс в python?

#python-3.x #class

#python-3.x #класс

Вопрос:

итак, я пишу код, в котором я генерирую определенные данные в классе и сохраняю их в словаре. Я хочу использовать эти данные во втором классе. Первый класс — это как товарищи:

 class DataAnalysis():

    def __init__(self,matfile=None):
        '''Constructor
        '''
        self.matfile= matfile
    def get_alldata(self):
        print('all dict data accessed')
        print(bodedata_dict)
        return bodedata_dict

if __name__ == '__main__':
    obj1= DataAnalysis(matfile=matfile)
    "do some work"
    bodedata_dict.update(bode_data)
    obj1.get_alldata()
  

Затем я получаю доступ к словарю во втором классе как:

 from A import DataAnalysis

class PlotComaparison(DataAnalysis):
if __name__ == '__main__':
    obj= DataAnalysis(matfile=None)
    obj1= PlotComaparison(obj)
    dict_data= obj.get_alldata()
  

Но когда я запускаю скрипт со вторым классом, он выдает следующую ошибку:
Файл «DataAnalysis.py «, строка 301, в get_alldata
print(bodedata_dict)
Ошибка имени: имя ‘bodedata_dict’ не определено

Я очень новичок в концепции классов в python, поэтому, пожалуйста, помогите мне с тем, как я могу использовать данные из одного класса в другой.

Ответ №1:

get_alldata() Метод в DataAnalysis классе, который вы определили, возвращает a bodedata_dict , который нигде не определен. Это похоже на печать содержимого переменной без ее предварительного определения.

РЕДАКТИРОВАТЬ: если смотреть дальше, bodedata_dict в первом примере это происходит извне класса. Вероятно, вы захотите изменить поток своей программы, чтобы при DataAnalysis вызове метода get data он не зависел от внешнего состояния.

Комментарии:

1. но функция get_alldata() отлично работает в классе DataAnalysis .. Когда я пытаюсь вызвать его в другом классе, он выдает эту ошибку

2. Не могли бы вы пояснить, что вы подразумеваете под тем, что он нормально работает в классе DataAnalysis? Если вы имеете в виду, что он компилирует создание класса, тогда это сработает. Как и при определении класса или функции, он не проверяет, являются ли переменные, используемые в определении, действительными или определенными. Тем не менее, спросите себя: что bodedata_dict должно быть и откуда оно берется?

3. bodedata_dict — это словарь, который генерируется в основном методе класса DataAnalysis.

4. Если вы имеете в виду if __name__ == '__main__': метод. Он не запускается при импорте файлов. Вы должны изменить его так, чтобы bodedata_dict каким-то образом создавался и сохранялся внутри класса