2012-08-24 60 views
3

在下面的示例中,是否有一個魔術字可代替<ChildClass>,它的作用與super相反?如何從父方法引用子類?

class Parent(object): 

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

class someChild(Parent): 
    x = 10 

這是一個愚蠢的例子,但它顯示了我的意圖。順便說一下,使用someChild將不起作用,因爲有許多子類。

我能想到的唯一解決方案是在每個調用Parent構造函數的父類中引用自身(或者甚至傳遞x)的構造函數,但是我想避免使用構造函數在每個孩子。

+1

也許我錯過了一些東西,但這不應該是可能的,因爲父母可以有許多孩子。 – xbonez

+1

@xbonez:我想他是指當一個子類調用「Parent .__ init__」時,如下面的示例所示。 –

+0

@xbonez:對不起,我應該提到父類本身從不使用,它只是用於子類化。 –

回答

6

剛使用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具有(在上面的例子None)一類屬性x以及 - 孩子的優先。

+1

有時候生活可能很簡單:)謝謝! –

0

self.x將工作,如果該實例沒有x屬性。

type(self).x如果該實例具有x屬性,並且您希望該類的值基本上跳過該實例。