我正在创建一个模块,需要在其中定义一组将在同一模块中使用的对象
我的最终目标是让这样的东西发挥作用
m = Mod()
obj1 = m.T1('text')
obj2 = m.T2(23)
m.togheter(obj1, obj2)
我的问题是,我需要跟踪我的子类中的ID。
我已经走了这么远,这给了我一个来自return super(Mod.ModObj, self)._cid
的AttributeError: 'super' object has no attribute '_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
这里怎么了?我也尝试了其他几种“反复试验”的方法,但我开始认为我这样做是完全错误的
ModObj
不从Mod
继承;它只是一个从object
继承的嵌套类,而且object
实际上没有名为_cid
的属性(或任何属性)您的类
ModObj
不是Mod的子类,而是成员。你可能想说class ModObj(Mod)
还要注意,只要不重写子类中的
_cid
,就根本不需要使用super
,因为超类成员自动存在于子类中(这是类继承的要点)最后,这真的是你想要的吗?在我看来,您似乎希望每个
Mod
实例都有一个唯一的ID,并且希望每个ModObj
实例继承一个特定Mod
实例的ID。类继承不会这样做。您可能正在寻找父子关系相关问题 更多 >
编程相关推荐