2

我有一堂课:

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

它是孩子:

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

我需要从 Bar()-object 创建一个 Foo()-object 我该怎么做?

IE:

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

b = Bar(a, 'ololo')

print b.a
print b.b

我打印了这个:

2
1
ololo

并期待这个:

2
2
ololo
4

3 回答 3

0

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

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

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

于 2013-04-14T16:03:13.923 回答
0

我认为您谈论的是复制构造函数。在这里,您可以找到一种如何在 python 中创建它的方法 -这是否相当于 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
于 2013-04-14T15:24:27.387 回答
-1

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

class Bar:
    def __init__(self,foo,string):
        self.b=string
        if isinstance(foo,Foo):
            self.a=foo.a
于 2013-04-14T16:50:46.873 回答