获取使用基类的子类中的父属性

2024-03-29 07:52:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个模块,需要在其中定义一组将在同一模块中使用的对象

我的最终目标是让这样的东西发挥作用

m = Mod()
obj1 = m.T1('text')
obj2 = m.T2(23)
m.togheter(obj1, obj2)

我的问题是,我需要跟踪我的子类中的ID。 我已经走了这么远,这给了我一个来自return super(Mod.ModObj, self)._cidAttributeError: '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

这里怎么了?我也尝试了其他几种“反复试验”的方法,但我开始认为我这样做是完全错误的


Tags: textselfmodnumberreturndefcurrentclass
2条回答

ModObj不从Mod继承;它只是一个从object继承的嵌套类,而且object实际上没有名为_cid的属性(或任何属性)

您的类ModObj不是Mod的子类,而是成员。你可能想说class ModObj(Mod)

还要注意,只要不重写子类中的_cid,就根本不需要使用super,因为超类成员自动存在于子类中(这是类继承的要点)

最后,这真的是你想要的吗?在我看来,您似乎希望每个Mod实例都有一个唯一的ID,并且希望每个ModObj实例继承一个特定Mod实例的ID。类继承不会这样做。您可能正在寻找父子关系

相关问题 更多 >