4

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

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 中实现参数对象重构(我只是想强制使用 C++ 技术)?

4

3 回答 3

3

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

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

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

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

于 2010-01-03T17:46:52.900 回答
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)
于 2010-01-03T20:18:47.593 回答
1
class B(A):
    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)

阅读更多关于super()详细信息。

于 2010-01-03T17:39:39.110 回答