Python: использование YAML для автоматического создания методов класса

1

Я пытаюсь создать кучу подобных методов с использованием файла конфигурации YAML. Однако я не смог найти что-то в Интернете или понять это.

example.yml

attributes:
  - a
  - b
  - c

примерный класс

import yaml

class Test:
    def __init__(self):
        with open('example.yml', 'rb') as f:
            attrib_list = yaml.load(f)

        _list = []
        for name in attrib_list:
            _list.append(self.__setattr__('_' + name, None))

# create similar methods in a loop
         for name, _ in zip(attrib_list, _list):
             @property
             def name(self):  # I know name is a string so cannot be this way but how if this can be done?
                 return _

             @name.setter
             def __set + _(self, v):  # __set + '_' + name as method name
                 pass

             @name.getter
             def __get + _(self):  # __get + '_' + name as method name
                 pass

Есть ли эффективный способ создания многих подобных методов таким образом, перейдя через файл конфигурации?

Или есть лучший способ справиться с чем-то подобным?

Благодарю.

  • 0
    Почему вы хотите создать кучу бессмысленных свойств в любом случае?
  • 0
    @juanpa.arrivillagajuanpa.arrivillaga это для пользовательской оболочки C ++, которую я разработал, и мне нужен ее модуль python, который взаимодействует с C ++. Я только что сделал MWE проблемы под рукой, пропуская взаимодействие с другим объектом
Теги:
class
python-3.x
methods

1 ответ

1
Лучший ответ

Использовать класс свойств

class Test:
    def __init__(self):
        with open('102.yaml', 'rb') as f:
            attrib_list = yaml.load(f)

        _list = []
        for name in attrib_list['attributes']:
            _list.append(self.__setattr__('_' + name, None))            
            setattr(self.__class__, name, 
               property( Test.getprop(self,name), Test.setprop(self,name)))

    @staticmethod
    def getprop(self,name):
        def xget(self):
            print("Get {}".format(name))
            return name
        return xget

    @staticmethod
    def setprop(self,name):
        def xset(self,value):
            print("Set {} to {}".format(name,value))
        return xset

>>> zz = Test()
>>> zz.a = "hallo"
Set a to hallo
>>> print(zz.a)
Get a
a
  • 0
    Спасибо, я проверю это позже и отмечу, что принято, если все пойдет хорошо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню