现在我使用参数对象的类来继承
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 ++技术)?
答案 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()
。