我正在创建一个模块,我需要定义一组将在同一模块中使用的对象。
我的最终目标是让这样的事情发挥作用;
m = Mod()
obj1 = m.T1('text')
obj2 = m.T2(23)
m.togheter(obj1, obj2)
我遇到的问题是我需要跟踪子类中的ID。
我已经走到了这一步,这给了AttributeError: 'super' object has no attribute '_cid'
来自return super(Mod.ModObj, self)._cid
class Mod(object):
current_cid = 0
@property
def _cid(self):
c = self.current_cid
self.current_cid += 1
return c
def togheter(self, obj1, obj2):
# Do something with obj1.text and obj2.number here...
return True
class ModObj(object):
@property
def _cid(self):
return super(Mod.ModObj, self)._cid
class T1(ModObj):
def __init__(self, text):
self.text = text
print self._cid
class T2(ModObj):
def __init__(self, number):
self.number = number
print self._cid
m = Mod()
m.T1('text')
m.T2(23)
print m.current_cid # Should return 2
这里有什么问题?我尝试了其他几个"试验和错误"方式,但我开始认为我这样做是完全错误的方式......
答案 0 :(得分:0)
ModObj
不会从Mod
继承;它只是一个继承自object
的嵌套类,而object
确实没有名为_cid
的属性(或任何属性)。
答案 1 :(得分:0)
您的班级ModObj
不是 Mod的子类,但是成员。您可能想说class ModObj(Mod)
。
另请注意,只要您不在子类中覆盖_cid
,就根本不需要使用super
,因为超类成员会自动存在于子类中(这就是类继承)。
最后 - 这真的是你想要的吗?在我看来,您希望每个Mod
实例都具有唯一的ID,并且每个ModObj
实例都要继承特定Mod
实例的ID。类继承将不这样做。您可能正在寻找亲子关系。