3

可能重复:
类实例的自动递增 ID

我想要 Python 中的以下 Java 类:

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

在这段 Java 代码中,每个对象myObject都有id并且不可能有两个对象具有相同的 ID(这是一个单线程应用程序)。

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

4

3 回答 3

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
于 2012-11-12T22:10:00.780 回答
2

正如我在对@Martjin Pieters 回答的评论中提到的那样,id()内置可能足以满足您的需求。 id(obj)返回系统中任何在访问时唯一的对象的 id(本质上,在某些解释器中,字面意思是对象的内存地址)。除非您的对象经常被销毁,但您的 id 引用即使在销毁后也需要保持有效,id()否则应该可以满足您独特的 id 需求。

来自文档:

[id() 返回的值] 是一个整数(或长整数),保证在其生命周期内对于该对象是唯一且恒定的。具有非重叠生命周期的两个对象可能具有相同的 id() 值。

于 2012-11-12T22:23:12.717 回答
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)

希望这可以帮助

于 2012-11-12T22:39:15.080 回答