如何从父方法引用子类?

时间:2012-08-24 05:19:33

标签: python

在下面的示例中,是否有一个神奇的词我可以代替<ChildClass>,它的作用与超级相反?

class Parent(object):

    def __init__(self):
        print <ChildClass>.x

class someChild(Parent):
    x = 10

这是一个愚蠢的例子,但它表明了我的意图。顺便说一句,使用someChild将不起作用,因为有许多子类。

我能想到的唯一解决方案是在每个子类中都有一个构造函数,它调用Parent的构造函数并引用它自己(甚至传递x),但我想避免在构造函数中使用每个孩子。

2 个答案:

答案 0 :(得分:7)

使用self.x有什么问题?

class Parent(object):
    x = None  # default value
    def __init__(self):
        print self.x

class someChild(Parent):
    x = 10
    def __init__(self):
        Parent.__init__(self)

class otherChild(Parent):
    x = 20
    def __init__(self):
        Parent.__init__(self)

a = someChild()
# output: 10
b = otherChild()
# output: 20

请注意,即使Parent也具有类属性x(上例中为None),这种情况仍然有效 - 孩子优先。

答案 1 :(得分:0)

如果实例没有self.x属性,则

x将起作用。

type(self).x如果实例具有x属性,并且您想要类的值,实际上是跳过实例。