Выглядит как стандартная проблема данных и их представления.
Можно все запихнуть в класс, используя, например,
property
- как раз для этого случая они подходят на 100%. Но придется написать много кода.
Альтернатива - разделить данные и представление. В простом случае - за пределами класса нужно будет создать словарь (набор словарей) для выбора текста в зависимости от данных. Именно так зачастую работают всякие системы локализации, переводов, кастомизации внешнего вида и т.д.
class Person:
has_map = {True: 'Есть', False: 'Нет'}
def __init__(self, name):
self.name = name
self._something_1 = False
self._something_2 = True
@property
def something_1(self):
return self.has_map[self._something_1]
@something_1.setter
def something_1(self, value):
self._something_1 = value
@property
def something_2(self):
return self.has_map[self._something_2]
@something_2.setter
def something_2(self, value):
self._something_2 = value
def attr_mapping(value):
has_map = {True: 'Есть', False: 'Нет'}
if isinstance(value, bool):
return has_map[value]
if __name__ == '__main__':
Anna = Person('Anna')
print(Anna.something_2)
Anna.something_2 = False
print(Anna.something_2)
Anna = Person('Anna')
print(attr_mapping(Anna._something_2))
Anna._something_2 = False
print(attr_mapping(Anna._something_2))