可能我在这里遗漏了一些非常基本的东西,但是当我用以下方式定义一个类时:
class Arbitrary(object):
"""Arbitary class to test init"""
def __init__(self):
self.x = dict()
并以下列方式重复实例化
for i in range(5):
a = Arbitrary()
print '{} {} {} {}'.format(i, a, id(a), a.x)
我没有像我期望的那样得到Arbitrary()
类的全新实例。事实上,我正在重复两个实例:
0 <__main__.Arbitrary object at 0x1006cb110> 4302090512 {}
1 <__main__.Arbitrary object at 0x1006cb190> 4302090640 {}
2 <__main__.Arbitrary object at 0x1006cb110> 4302090512 {}
3 <__main__.Arbitrary object at 0x1006cb190> 4302090640 {}
4 <__main__.Arbitrary object at 0x1006cb110> 4302090512 {}
为什么?
如何定义班级中的__init__
,以便每次对Arbitrary()
的新调用都会返回一个全新的实例?
答案 0 :(得分:4)
我不是Python专家,但我可以看到你正在覆盖你的实例。我尝试将它改为下面,它运行正常:
#!/bin/env python
class Arbitrary(object):
"""Arbitary class to test init"""
def __init__(self):
self.x = dict()
a = []
for i in range(5):
a.append(Arbitrary())
print '{} {} {} {}'.format(i, a[i], id(a[i]), a[i].x)
结果:
ckim@stph45:~/python/test2] test2.py
0 <__main__.Arbitrary object at 0x7fc6952b6090> 140490882900112 {}
1 <__main__.Arbitrary object at 0x7fc6952b6250> 140490882900560 {}
2 <__main__.Arbitrary object at 0x7fc6952b6290> 140490882900624 {}
3 <__main__.Arbitrary object at 0x7fc6952b62d0> 140490882900688 {}
4 <__main__.Arbitrary object at 0x7fc6952b6310> 140490882900752 {}