我有一个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
的{{1}}类来覆盖默认值并提供用户特定的设置。虽然,我听说重写方法是糟糕的OOP设计。这导致我选择2 ...
然后我考虑创建Settings
,但不会扩展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'
我该如何编码?
答案 0 :(得分:3)
重写方法不仅是不错误的OOP设计,它是subtype polymorphism的基础,它是OOP的核心,也是摆脱这种条件检查需要的常用方法
有些时候你应该prefer composition to inheritance,但是从你的描述中不清楚将它作为子类是否有任何问题。