OOP:设计这个对象的最佳方法是什么?

时间:2011-08-26 10:44:18

标签: python oop design-patterns

我有一个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'

我该如何编码?

1 个答案:

答案 0 :(得分:3)

重写方法不仅是错误的OOP设计,它是subtype polymorphism的基础,它是OOP的核心,也是摆脱这种条件检查需要的常用方法

有些时候你应该prefer composition to inheritance,但是从你的描述中不清楚将它作为子类是否有任何问题。