2011-01-13 11 views
7

Warum kann ich super nicht verwenden, um eine Methode der Superklasse einer Klasse zu erhalten?Python: Warum kann ich `super` nicht in einer Klasse verwenden?

Beispiel:

Python 3.1.3 
>>> class A(object): 
...  def my_method(self): pass 
>>> class B(A): 
...  def my_method(self): pass 
>>> super(B).my_method 
Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    super(B).my_method 
AttributeError: 'super' object has no attribute 'my_method' 

(Natürlich ist dies ein trivialer Fall, wo ich gerade A.my_method tun könnte, aber ich brauchte diese für einen Fall von Diamant-Vererbung.)

Nach super ‚s Dokumentation, scheint es, als was ich will, sollte möglich sein. Dies ist super ‚s Dokumentation: (Hervorhebung von mir)

super() -> gleiche wie super(__class__, <first argument>)

super(type) -> ungebundenen Super Objekt

super(type, obj) -> gebunden super Objekt; benötigt isinstance(obj, type)

super (typ, typ2) -> gebunden super objekt; erfordert issubclass (Typ2, Typ)

[nicht-relevante Beispiele geschwärzt]

+0

ich meine Antwort gelöscht - ich den gleichen Fehler habe. Sehr seltsam, werde ein wenig mehr darauf schauen. –

Antwort

7

Nach this scheint es, wie ich nur super(B, B).my_method anrufen müssen:

>>> super(B, B).my_method 
<function my_method at 0x00D51738> 
>>> super(B, B).my_method is A.my_method 
True 
+0

Interessant. Wusste nicht, dass das funktionieren würde. – James

+1

Froh, dass die verlinkte Quelle geholfen hat. :) – James

+3

Denken Sie daran, dass dies Ihnen ungebundene Methoden geben wird; Der Grund, warum Sie normalerweise "super (B, self)" sagen müssen, ist, dass Sie ein Superobjekt erhalten, das an ein Objekt gebunden ist, um gebundene Methoden zu erhalten. –

8

Es sieht aus, als ob Sie eine Instanz von B müssen als zweites Argument übergeben in.

http://www.artima.com/weblogs/viewpost.jsp?thread=236275

+0

+1, Gute gelesen, Teil 2/3 dieser Artikelserie beschreibt die genauen Probleme und realen Anwendungsfall für 'ungebundene Super-Objekte': http://www.artima.com/weblogs/viewpost.jsp?thread=236278 (Die Geheimnisse der ungebundenen Superobjekte) – ChristopheD

Verwandte Themen