每个python对象都有一个int

时间:2012-11-12 22:07:43

标签: java python static int

  

可能重复:
  Auto-incrementing IDs for Class Instances

我希望在Python中使用以下Java类:

public class MyObject {
    private static int ID = 0;
    private final int id;
    public MyObject() {
        id = ID++;
    }
}

在这个Java代码中,每个myObject都会有id,并且两个对象无法拥有相同的ID(它是一个单线程的应用程序)。

我可以在Python中做这样的事情吗?

3 个答案:

答案 0 :(得分:8)

在Python中,您可以直接引用类属性:

class MyObject(object):
    ID = 0

    def __init__(self):
       self.id = MyObject.ID = MyObject.ID + 1

演示:

>>> class MyObject(object):
...     ID = 0
...     def __init__(self):
...        self.id = MyObject.ID = MyObject.ID + 1
... 
>>> MyObject().id
1
>>> MyObject().id
2
>>> MyObject().id
3
>>> MyObject.ID
3

答案 1 :(得分:2)

正如我在@Martjin Pieters的回答中提到的那样,id()内置可能足以满足您的需求。 id(obj)返回系统中任何对象的id,该ID在访问时是唯一的(实际上,在某些解释器中,字面上是对象的内存地址)。除非你的对象被频繁销毁,但你的id引用即使在破坏后也需要保持有效,id()应该适用于你唯一的id需求。

来自docs:

  

[id()返回的值是一个整数(或长整数),保证是唯一的   并且在该生命的生命周期中保持不变。两个对象   非重叠生命周期可能具有相同的id()值。

答案 2 :(得分:1)

@Martjin Pieters有正确的想法,但我建议你选择itertools.count

class MyObject(object):
    ID = itertools.count()

    def __init__(self):
       self.id = MyObject.ID.next()

>>> MyObject().id
0
>>> MyObject().id
1
>>> MyObject().id
2
>>> MyObject.ID
count(3)

希望这有帮助