类提供继承到提供底层数据的类的方法 - 如何调用?

时间:2016-10-10 13:26:12

标签: python design-patterns

我有一个类Library,它定义了一些方法 - 抽象数据。然后,该类继承到实际定义数据的类AB中。目的是将Library重用于不同的底层数据存储模型。

在Python中:

class Library:
    def meth1(self, ...):
      return ...
    def meth2(self, ...):
      return ...
    def compute_property1(...):
      return ...
    def compute_property2(...):
      return ...

class B(Library):
    property1 = property(lambda s: s.compute_property1()) #plain property
    property1 = property(lambda s: s.compute_property2()) #plain property

class A(Library):
    property1 = my_property_with_fancy_caching_and_compression_and_stuff(....)
    property1 = my_property_with_fancy_caching_and_compression_and_stuff(....)

这种模式是一种众所周知的设计方法吗?它有名字吗?是否有推荐的Library名称?

1 个答案:

答案 0 :(得分:1)

您的示例正在利用Python的多重继承机制,从而将方法从仅方法,无数据,抽象类A添加到一个(或几个)面向数据的,具体的具体类{{1 }}

由于它将数据存储(表示)与功能(方法)分开,因此Bruno评论时非常接近mixin ,但区别在于这种模式通常会带来两者数据存储功能。你的模式的这种差异使它不完全OOP(一个对象应该带来两者),但是让人联想到Aspect-Oriented范例

如果我在OOP中描述这种机制,我会使用默认方法将类B称为接口。这将有能力导入某些方法实现的任何地方,但没有字段。我会打电话给课A Data Access Object

注意:如果您打算为多个界面执行此操作(例如,如果您要将Bmeth1()从{彼此{1}}和compute_priority_1(),并将它们放在两个独立的界面中),然后是Interface Segregation Principle