我有一个班级:
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
答案 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