在python中有这个反射设计模式的名称吗?

时间:2016-04-29 15:40:07

标签: python design-patterns interface

这是一个奇怪的问题。我编写了一些使用反射来查找在给定对象上执行的方法的类。

例如,我有一个类根据遇到的type数据调用方法。这些方法是用户定义的,但它只是一个更好的界面,可用于进行这些修改(将所有type转换为另一个等)。

以下是该课程的内容:

class TypeWare(object):
    def modify(self, data_set):
        """ Iterate over data_set, find child class methods and execute them on the appropriate data type. """
        types = [str, float, int, tuple, dict, list]
        data_output = []
        for data in data_set:
            data_type = type(data)
            if data_type in types:
                try:
                    # Try to find the method by name.
                    method = getattr(self, data_type.__name__)
                    # Make modifications to data and add it to the output
                    data_output.append(method(data))
                except AttributeError:
                    data_output.append(data)
            else:
                data_output.append(data)
        return data_output

所以任何其他类都可以继承它,并且只要它具有以它应该修改的type数据命名的方法,就会在该数据类型上调用该方法,并且返回的值将替换原始类值。

如果我的解释令人困惑,这是一个简单的例子:

class ExampleTypeWare(TypeWare):
    # Square any integers
    def int(self, value):
        return value * value

    # Operate recursively on lists.
    def list(self, the_list):
        return self.modify(the_list)

# Then the instance calls the modify method from the parent class.
tw = ExampleTypeWare()
print tw.modify([2, 4, 6, 8, [10, 12, 14]])

我想我的问题是,是否有一个类的名称可以启用此类行为?它似乎非常具体,我之前使用过这种模式,所以我有一个干净的界面来过滤或修改数据。我只是不知道如何向任何人解释这个概念而不进入完整的细节,如果有这个设计模式的名称可能是不必要的。

重申一下,所讨论的模式基本上只是在主类方法中使用反射来寻找子类中存在的方法,以便根据特定的上下文动态调用给定数据上的那些方法。

0 个答案:

没有答案