1

背景:来自 Perl 世界,我目前正在我的新工作中学习 Python。除了做这项工作之外,我还试图通过阅读 SO、Python 文档和各种文章,将更多“真正的 OOP”和“pythonic”思维带入我的脑细胞流程。

现在在反模式页面的 OO 设计部分,维基百科列出了这个 BaseBean,在它自己的页面上描述为:

在面向对象编程中,BaseBean 是一个实用程序对象,具体实体从该对象派生(通过子类化)。正确的设计建议应该通过委托来提供继承的功能。BaseBean 是反模式的一个示例(其中名称的“Bean”部分来自通用实体对象或 JavaBean 的标准 Java 命名约定)。

也许是因为我没有使用 Java 的经验,也许是因为其他原因,但我很难理解这个解释。但是,我觉得几行代码在这里值千言万语。

有人可以帮我澄清一下吗?最好在 Python 中使用一个简单的例子?

4

1 回答 1

0

基于维基百科文章中的这句话:

使用继承会导致派生类依赖于可能超出开发人员控制的基类的内部。虽然实用程序类在实现之间通常是稳定的并且相当相似,但未来一些无害的变化可能会破坏派生类(因为关系没有很好地定义)。此外,它混淆了派生类的业务意义。例如,订单不是向量,尽管订单可能包含订单项向量。

它似乎指的是这样的事情:

class Order(dict):
    def __repr__(self):
        return """
Customer: {customer}
Address: {address}
        """.format(**self)

o = Order(customer = "Joe Customer", address = "123 Market St")
于 2013-07-25T23:15:26.430 回答