类不会在重复调用时创建新实例

时间:2016-08-10 01:57:52

标签: python class oop heap-memory

可能我在这里遗漏了一些非常基本的东西,但是当我用以下方式定义一个类时:

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()的新调用都会返回一个全新的实例?

1 个答案:

答案 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  {}