我有一个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
类来覆盖默认值并提供特定于用户的设置。不过,我听说重写方法是糟糕的OOP设计。这让我想到了第二种选择。。。在
然后我考虑创建UserSettings
,但它不会扩展{
这样我就可以:
print user_settings.title # get the user title
print user_settings.settings.title # get the generic title
我该如何编码?在
重写方法不仅不是糟糕的OOP设计,它是subtype polymorphism(OOP的核心)的基础,也是摆脱对此类条件检查需求的常见方法。在
当然,有时您应该prefer composition to inheritance,但从您的描述中看不出将此作为子类有任何错误。在
相关问题 更多 >
编程相关推荐