我正在尝试定义一个通用基类Geometry
,每个对象的唯一ID从0开始。我使用init作为方法。
我正在尝试创建一个名为Geometry
的通用基类,我将用它来组织几何对象,如点或多边形,并包含从0开始的id
属性。我知道所有对象都应该有一个唯一的ID。我在创建一个新的Geometry对象(整数)时使用了构造函数(__init__
)。并希望基类自动分配Geometry对象的ID。
当前代码:
class Geometry(object):
def__init__(self,id):
self.id = id
我认为我走的是正确的道路,但我并不积极。我应该id = 0
以上def__init__(self,id)
吗?
任何指导都将不胜感激。
答案 0 :(得分:2)
如果您的班级的第一行是id = 0
,那么它就会成为一个类属性,并由Geometry
及其所有子级的所有实例共享。
以下是使用类范围变量的示例:
#!/usr/bin/env python2
class Geometry(object):
# ident is a class scoped variable, better known as Geometry.ident
ident = 0
def __init__(self):
self.ident = Geometry.ident
Geometry.ident += 1
class Circle(Geometry):
def __init__(self, radius):
Geometry.__init__(self)
self.radius = radius
def __str__(self):
return '<Circle ident={}, {}>'.format(self.ident, self.radius)
class Equilateral(Geometry):
def __init__(self, sides, length):
# super is another way to call Geometry.__init__() without
# needing the name of the parent class
super(Equilateral, self).__init__()
self.sides = sides
self.length = length
def __str__(self):
return '<Equilateral ident={}, {}, {}>'.format(self.ident,
self.sides, self.length)
# test that ident gets incremented between calls to Geometry.__init__()
c = Circle(12)
e = Equilateral(3, 8)
f = Circle(11)
print c
assert c.ident == 0
print e
assert e.ident == 1
print f
assert f.ident == 2
虽然我没有把手指放在上面,但是有些事情是错的。
答案 1 :(得分:-1)
class Geometry(object):
def __init__(self,id=0):
self.id = id
当您创建该类的实例时,将调用python中的 __init__
circle = Geometry(1)