如何从父类方法引用子类?

5
在下面的示例中,是否有一个魔法词可以代替<ChildClass>,它的作用类似于super的相反作用?
class Parent(object):

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

class someChild(Parent):
    x = 10

这只是一个愚蠢的例子,但它可以表达我的意图。顺便说一下,使用 someChild 是不行的,因为有许多子类。

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


1
也许我漏掉了什么,但这不应该是可能的,因为一个父级可以有多个子级。 - Ayush
1
@xbonez:我认为他的意思是当单个子类调用Parent.__init__,就像我下面的例子一样。 - David Robinson
@xbonez:抱歉,我应该提到父类永远不会被单独使用,它只用于子类化。 - John Peters
2个回答

8
只使用 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
有时候生活可以很简单 :) 谢谢! - John Peters

0

self.x 如果实例没有 x 属性,则可以使用。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接