Я пытаюсь создать кучу подобных методов с использованием файла конфигурации 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
Есть ли эффективный способ создания многих подобных методов таким образом, перейдя через файл конфигурации?
Или есть лучший способ справиться с чем-то подобным?
Благодарю.
Использовать класс свойств
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