ID功能问题

时间:2016-12-29 16:38:55

标签: python python-3.x

所以我应该为每个对象创建一个具有唯一ID的类(从0开始)。每次创建新对象时,它还应自动为其分配唯一ID。 提示(类的构造函数应自动分配Geometry对象的ID .ID的数据类型是一个整数,从0开始) 我的输出应该类似于

>>>geo1 = Geometry()
>>>geo1.id
0
>>>geo2 = Geometry()
>>>geo2.id
1

我的问题是id似乎是一个生成随机数的内置函数。但是我的指示说这个数字应该从0开始。无论如何要做到这一点?

我的代码

class Geometry (object):

    def __init__(geo, id):
        geo.id = geo1
geo1 = Geometry(0,1)
print geo1

3 个答案:

答案 0 :(得分:1)

将下一个ID保存在类属性中:

class Geometry(object):
    next_id = 0
    def __init__(self):
        self.id = Geometry.next_id
        Geometry.next_id += 1

计数器Geometry.next_id保存在类中,而不是实例中,因此它将在每个实例生成时增加:

>>> geo1 = Geometry()
>>> geo1.id
0
>>> geo2 = Geometry()
>>> geo2.id
1

答案 1 :(得分:1)

HttpServletRequestWrapper可以拥有自己的“静态”版本。实例计数器:

Geometry

每次拨打class Geometry (object): current_id = 0 def __init__(self): self.id = Geometry.current_id Geometry.current_id += 1 geo0 = Geometry() print(geo0.id) # -> 0 geo1 = Geometry() print(geo1.id) # -> 1 时,计数器都会增加一个。

据我所知,无法覆盖内置__init__函数。

答案 2 :(得分:0)

只是提出使用__new__的替代方法以及实例变量和类变量不相同的事实:

class Geometry(object):
    # create a class variable
    id = 0
    def __new__(cls, *args, **kwargs):
        # Create a new object
        obj = object.__new__(cls, *args, **kwargs)
        # assign the next id as instance variable
        obj.id = cls.id
        # increment the class variable
        cls.id += 1
        # return the object
        return obj

    def __init__(self):
        pass

>>> geo1 = Geometry()
>>> print(geo1.id)
0
>>> geo2 = Geometry()
>>> print(geo2.id)
1
>>> geo3 = Geometry()
>>> print(geo3.id)
2