#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 каким-то образом создавался и сохранялся внутри класса