Я изо всех сил пытался создать класс для своего кода обработки изображений в Python.
Код требует целого ряда различных параметров (установленных в файле params.txt), которые легко можно сгруппированы в разные категории. Например, некоторые являются путями, некоторые связаны с экспериментальной геометрией, некоторые являются просто переключателями для включения / выключения определенных функций обработки изображений и т. Д. c и т. c.
Если моя «структура» (не конечно, как я должен его создать) создается как P, я хотел бы иметь что-то вроде
P = my_param_object()
P.load_parameters('path/to/params.txt')
, а затем, из основного кода, я могу получить доступ к любым нужным элементам, таким образом,
print(P.paths.basepath())
'/some/path/to/data'
print(P.paths.year())
2019
print(P.filenames.lightfield())
'andor_lightfield.dat'
print(P.geometry.dist_lens_to_sample())
1.5
print(P.settings.subtract_background())
False
print(P.settings.apply_threshold())
True
Я уже пытался создать свой собственный класс, чтобы сделать это, но все в одном массивном блоке. Я не знаю, как создавать вложенные части для класса. Так, например, у меня есть настройка и функция под названием «load_background». Это имеет смысл, потому что функция load_background всегда загружает указанное c имя файла в указанном c месте, но должна делать это только в том случае, если для параметра load_background установлено значение True
. Внутри класса я пытался что-то сделать как
self.setting_load_background = False
def method_load_background(self):
myutils.load_dat(self.background_fname())
но это очень уродливо. Было бы лучше иметь,
if P.settings.load_background() == True:
P.load_background()
else:
P.generate_random_background()