2012-02-16 49 views
-2

根據我的理解,函數super應該允許嵌套在另一箇中的類訪問其父'self'。我可能是錯在這一點,但這裏是我想要實現一個簡單的例子:不要從Python的超級預期的結果

class Test: 
    def __init__(self): 
     self.message = "Hello World" 
    class Print: 
     def __init__(self): 
      print super(Test, self).message 


this = Test() 
this.Print() 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
/home1/users/joe.borg/<ipython-input-3-3eb5db70be43> in <module>() 
----> 1 this.Print() 

/home1/users/joe.borg/<ipython-input-1-cee67a2914c3> in __init__(self) 
     4  class Print: 
     5   def __init__(self): 
----> 6    print super(Test, self).message 
     7 

TypeError: must be type, not classobj 
+2

爲什麼你認爲要嵌套類這樣呢? – geoffspear 2012-02-16 12:39:59

+4

您對'super()'的理解完全錯誤,您可能需要從[官方文檔](http://docs.python.org/library/functions.html#super)開始。即使你使用'super()'也許會很棘手,這是一個覆蓋了互聯網的話題。 – 2012-02-16 12:40:23

+0

對我來說,在嵌套類中有很多興趣。只是一個例子http://stackoverflow.com/questions/78799/is-there-a-benefit-to-defining-a-class-inside-another-class-in-python – jdborg 2012-02-16 15:10:25

回答

0

我有這樣理想的結果:

class Test(object): 
    def __init__(self): 
     self.message = "Hello World" 
class Print(Test): 
     def __init__(self): 
      print super(Print, self).message 
5

super是應該的,以用來調用在mro(方法解析順序)的下一個方法給定類(通常是父類的方法)。這與你所要做的完全不同。

除此之外,你的類是舊式類(它們不是子類的對象),所以super抱怨,因爲它只適用於新式類。