Есть ли способ создать вложенные атрибуты класса в Python? - PullRequest
1 голос
/ 24 марта 2020

Я изо всех сил пытался создать класс для своего кода обработки изображений в 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...