Одним из способов является создание свойств для каждого из них:
@property
def param_1(self):
return self.big_parameter_group.small_parameter_group.param_1
@property
def param_2(self):
return self.big_parameter_group.small_parameter_group.param_2
@property
def param_2(self):
return self.big_parameter_group.small_parameter_group.param_2
Другим более надежным, но менее явным способом было бы переопределить метод getattr следующим образом:
def __getattr__(self, name):
import re
p = re.compile('param_[0-9]+')
if p.match(name):
return getattr(self.big_parameter_group.small_parameter_group, name)
else:
return super(MyClass, self).__getattr__(name)
Это будет работать для любого свойства, которое соответствует формату, указанному в регулярном выражении (param_
[некоторое число])
Оба эти метода позволят вам вызвать self.param_1
и т. Д., Но этотолько для восстановления.Если вы хотите установить атрибуты, вам также нужно создать сеттер:
@param_1.setter
def param_1(self, value):
print 'called setter'
self.big_parameter_group.small_parameter_group.param_1 = value
Или дополнить getattr
:
def __setattr__(self, name, value):
import re
p = re.compile('param_[0-9]+')
if p.match(name):
return setattr(self.big_parameter_group.small_parameter_group, name, value)
else:
return super(MyClass, self).__setattr__(name, value)
(не проверял это такмогут быть опечатки, но концепция должна работать)