我希望在Python中使用以下Java类:
public class MyObject {
private static int ID = 0;
private final int id;
public MyObject() {
id = ID++;
}
}
在这个Java代码中,每个myObject
都会有id
,并且两个对象无法拥有相同的ID(它是一个单线程的应用程序)。
我可以在Python中做这样的事情吗?
答案 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)
希望这有帮助