如何在Python中实现“参数对象”重构?

时间:2010-01-03 17:33:27

标签: python inheritance refactoring parameter-object

现在我使用参数对象的类来继承

class A():
    def __init__(self,p1,p2):
        self.p1, self.p2 = p1, p2

class B(A):
    def __init__(self,b):
        self.p1, self.p2 = b.p1, b.p2

这减少了使用代码的荒谬性,但不包括类代码本身。所以,我想做C ++的事情并将参数对象传递给初始化列表,如此

class A { 
    int p1,p2; 
}
class B : public A { 
    B(const A& a) : A(a) {} 
}

我可以在Python中执行此操作吗?具体来说,我可以通过以某种方式在子项中调用它是__init__来设置父类的属性吗? - 阅读“潜入Python”我猜我可以这样做,因为对象已经被调用时__init__构建。

或许,在Python中实现parameter object refactor可能有一些不同的方法(我只是试图强制使用C ++技术)?

3 个答案:

答案 0 :(得分:3)

一般来说,您可能不需要参数对象重构技术。 Python在标准库中有几个集合,它们已经具有参数对象重构所提供的核心优势。

此外,像参数对象设计模式这样的重构的成本/收益分析与C ++明显不同。例如,如果没有静态编译,对象创建和成员查找会更加昂贵。参数对象模式的基本情况是为相关字段提供名称空间,这可以通过Python在字典中完成。

如果您需要以与分组数据相关的方法形式进行某种模型操作,那么模式在Python中具有更多价值,但即使这样,“属性”这样简单且廉价的机制也可以解决成员属性的操作需求

通过对问题空间稍微详细的描述,我们可以帮助评估这种重构是否有益,但在使用Python时,最好不要使用该设计模式。

答案 1 :(得分:2)

将C ++代码翻译成python就像:

class A():
    def __init__(self,p1,p2):
        self.p1, self.p2 = p1, p2

class B(A):
    def __init__(self,b):
        A.__init__(self, b.p1, b.p2)

答案 2 :(得分:1)

class B(A):
    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)

详细了解super()