所以我应该为每个对象创建一个具有唯一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
答案 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