4

在下面的示例中,我可以用一个神奇的词来代替<ChildClass>它,就像 super 的反义词一样吗?

class Parent(object):

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

class someChild(Parent):
    x = 10

这是一个愚蠢的例子,但它表明了我的意图。顺便说一句, usingsomeChild是行不通的,因为有很多子类。

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

4

2 回答 2

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也具有类属性xNone在上面的示例中),它也是如何工作的——孩子的优先级。

于 2012-08-24T05:24:37.713 回答
0

self.x如果实例没有x属性,它将起作用。

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

于 2012-08-24T05:36:18.940 回答