Я создаю класс Python, но, похоже, я не могу заставить класс конструктора работать правильно. Вот мой класс:UnboundLocalError, инициализирующий класс python
class IQM_Prep(SBconcat):
def __init__(self,project_dir):
self.project_dir=project_dir #path to parent project dir
self.models_path=self.__get_models_path__() #path to parent models dir
self.experiments_path=self.__get_experiments_path__() #path to parent experiemnts dir
def __get_models_path__(self):
for i in os.listdir(self.project_dir):
if i=='models':
models_path=os.path.join(self.project_dir,i)
return models_path
def __get_experiments_path__(self):
for i in os.listdir(self.project_dir):
if i == 'experiments':
experiments_path= os.path.join(self.project_dir,i)
return experiments
Когда я инициализировать этот класс:
project_dir='D:\\MPhil\\Model_Building\\Models\\TGFB\\Vilar2006\\SBML_sh_ver\\vilar2006_SBSH_test7\\Python_project'
IQM= Modelling_Tools.IQM_Prep(project_dir)
Я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "<ipython-input-49-7c46385755ce>", line 1, in <module>
runfile('D:/MPhil/Python/My_Python_Modules/Modelling_Tools/Modelling_Tools.py', wdir='D:/MPhil/Python/My_Python_Modules/Modelling_Tools')
File "C:\Anaconda1\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 585, in runfile
execfile(filename, namespace)
File "D:/MPhil/Python/My_Python_Modules/Modelling_Tools/Modelling_Tools.py", line 1655, in <module>
import test
File "test.py", line 19, in <module>
print parameter_file
File "Modelling_Tools.py", line 1536, in __init__
self.models_path=self.__get_models_path__() #path to parent models dir
File "Modelling_Tools.py", line 1543, in __get_models_path__
return models_path
UnboundLocalError: local variable 'models_path' referenced before assignment
Modelling_Tools
это имя моего пользовательского модуля.
Не могли бы вы дать полный обзор? Также, что с '__weird_method_names__' - это не настоящие магические методы, вы не должны называть их таким образом. – jonrsharpe
Чтобы разделить методы, которые будут использоваться для создания атрибутов класса из других. Разве это не конвенция или я что-то упускаю? И да, конечно. – CiaranWelsh
Если они являются закрытыми для класса, используйте '_single_leading_underscore'. '__double_leading_and_trailing_underscore__' предназначен для заранее определенных *« магических методов »*, таких как' __init__' и '__str__'. – jonrsharpe