【发布时间】:2020-02-25 13:39:12
【问题描述】:
如果我创建如下类:
class Foo(object):
foo = {'useful_info': 'useful_info'}
def __init__(self, foo, bar):
self.foo['foo'] = foo
self.bar = bar
我创建了它的一个实例并将它的属性打印为:
Foo1 = Foo('foo1', 'bar1')
print(Foo1.foo)
print(Foo1.bar)
我得到了输出:
Foo1 = Foo('foo1', 'bar1')
print(Foo1.foo)
print(Foo1.bar)
但是,现在如果我创建一个名为 Foo2 的新实例并将 Foo1 和 Foo2 的属性打印为:
Foo2 = Foo('foo2', 'bar2')
print("Foo2.foo: ", Foo2.foo)
print("Foo2.bar: ", Foo2.bar)
print("Foo1.foo: ", Foo1.foo)
print("Foo1.bar: ", Foo1.bar)
我得到了输出:
Foo2.foo: {'foo': 'foo2'}
Foo2.bar: bar2
Foo1.foo: {'foo': 'foo2'}
Foo1.bar: bar1
字符串属性 bar 已按预期设置,但字典 foo 已针对 Foo 的两个实例进行了更新。
我可以通过在 init 魔术方法中声明 dict foo 来解决这个问题:
class Foo(object):
def __init__(self, foo, bar):
self.foo = {'useful_info': 'useful_info'}
self.foo['foo'] = foo
self.bar = bar
但是现在包含'useful_info'的字典foo在调用init函数之前无法访问,即如果我使用以下行:Foo.foo我得到一个AttributeError。
有没有办法创建一个包含一些“有用信息”的新字典,以便在初始化类之前可以访问有用的信息,并且类的每个新实例都有这个字典的不同实例。
【问题讨论】:
标签: python python-3.x class dictionary initialization