У меня есть settings
объект, который содержит некоторые общие настройки.Эти настройки будут меняться для каждого пользователя.Мне интересно, что было бы лучшим способом кодировать это.Мой текущий метод таков:
class Settings(object):
def __init__(self, user=None):
if user and not isinstance(user, users.User):
raise TypeError('must be a User object')
self.user = user
@property
def title(self):
if self.user:
return 'user setting'
return 'generic setting'
Учитывая, что в Settings
будет несколько методов, каждый раз нужно будет запускать этот оператор if
.
Я рассматривалналичие класса UserSettings
, который расширяет Settings
для переопределения значений по умолчанию и предоставления пользовательских настроек.Хотя я слышал, что переопределение методов - плохой дизайн ООП.Что приводит меня к варианту 2 ...
Затем я подумал о создании UserSettings
, но он не будет расширяться Settings
.Вместо этого он обернет его, и у меня будет что-то вроде:
class UserSettings(object):
def __init__(self, user=None):
if user and not isinstance(user, users.User):
raise TypeError('must be a User object')
self.user = user
self.settings = Settings()
@property
def title(self):
return 'user setting'
Так что тогда я могу сделать:
print user_settings.title # get the user title
print user_settings.settings.title # get the generic title
Как мне это кодировать?