TL; DR: необходимо определить уникальный набор геттеров и сеттеров для каждого свойства() 'd variable sucks. Могу ли я определить общие геттеры и сеттеры и использовать их с любой переменной, которую я хочу?
Скажем, я делаю класс с некоторыми хорошими геттерами и сеттерами:
class Foo
def getter(self):
return _bar+' sasquatch'
def setter(self, value):
_bar = value+' unicorns'
bar = property(getter, setter)
Довольно здорово, правда?
Теперь позвольте сказать, что я ввел другую переменную под названием "baz", и я не хочу, чтобы ее не оставляли в стороне от этой забавы sasquatch/unicorn. Ну, я думаю, я мог бы сделать еще один набор геттеров и сеттеров:
class Foo
def bar_getter(self):
return _bar+' sasquatch'
def bar_setter(self, value):
_bar = value+' unicorns'
bar = property(bar_getter, bar_setter)
def baz_getter(self):
return _baz+' sasquatch'
def baz_setter(self, value):
_baz = value+' unicorns'
baz = property(baz_getter, baz_setter)
Но это не очень СУХОЙ и бесполезно загромождает мой код. Думаю, я мог бы сделать это немного DRYer:
class Foo
def unicornify(self, value):
return value+' unicorns'
def sasquatchify(self, value):
return value+' sasquatch'
def bar_getter(self):
return self.sasquatchify(_bar)
def bar_setter(self, value):
_bar = self.unicornify(_bar)
bar = property(bar_getter, bar_setter)
def baz_getter(self):
return self.sasquatchify(_baz)
def baz_setter(self, value):
_baz = self.unicornify(_baz)
baz = property(baz_getter, baz_setter)
Хотя это может сделать мой код DRYer, он не идеален. Если бы я хотел unicornify и sasquatchify еще две переменные, мне пришлось бы добавить еще четыре функции!
Должен быть лучший способ сделать это. Могу ли я использовать один общий приемник и/или сеттер для нескольких переменных?
Без единой и безсмысленной реализации реального мира: Я использую ORM SQLAlchemy и хочу преобразовать некоторые данные при их хранении и извлечении из базы данных. Некоторые из преобразований применимы к нескольким переменным, и я не хочу загромождать свои классы с помощью геттеров и сеттеров.