如何从父对象创建对象?

时间:2013-04-14 15:15:22

标签: python oop constructor

我有一个班级:

class Foo():
    def __init__(self):
        self.a = 1

而且是孩子:

class Bar(Foo):
    def __init__(self, foo, string):
        Foo.__init__(self)
        self.b = string

我需要从Bar() - 对象创建一个Foo()对象 我怎么能这样做?

即:

a = Foo()
a.a = 2
print a.a

b = Bar(a, 'ololo')

print b.a
print b.b

我打印出来了:

2
1
ololo

并期待这一点:

2
2
ololo

3 个答案:

答案 0 :(得分:0)

我想你谈的是复制构造函数。在这里,您可以找到一种如何在python中创建它的方法 - Is this the equivalent of a copy constructor in Python?

import copy
class Bar(Foo):
    def __init__(self, foo, string):
        if foo:
            self.__dict__ = copy.deepcopy(foo.__dict__)
        else:
            Foo.__init__(self)

        self.b = string

答案 1 :(得分:0)

设置a.a = 2时,只在Foo类的单个实例中设置变量,而不是在“蓝图”类本身中更改变量。因此,当使用Foo类作为父类时,保留原始的self.a变量:a = 1。

这意味着子类Bar继承变量self.a = 1,这就是它在您的示例中打印的原因。

除此之外,我不确定你想要达到的目标,抱歉。

答案 2 :(得分:-1)

要使用“Foo”实例设置“Bar”实例的某些变量,您不需要遗产。 '因为你需要的不是Foo类,实际上你只需要一个Foo实例:

class Bar:
    def __init__(self,foo,string):
        self.b=string
        if isinstance(foo,Foo):
            self.a=foo.a