Czy metoda super() nie jest przeznaczona do użycia z metodami statycznymi?interakcja super() i @staticmethod
Kiedy próbuję coś podobnego
class First(object):
@staticmethod
def getlist():
return ['first']
class Second(First):
@staticmethod
def getlist():
l = super(Second).getlist()
l.append('second')
return l
a = Second.getlist()
print a
pojawia się następujący błąd
Traceback (most recent call last):
File "asdf.py", line 13, in <module>
a = Second.getlist()
File "asdf.py", line 9, in getlist
l = super(Second).getlist()
AttributeError: 'super' object has no attribute 'getlist'
Gdybym zmienić staticmethods do classmethods i przekazać instancję klasy do super(), wszystko działa dobrze. Czy nie nazywam tutaj nieprawidłowo (typ) lub jest coś, czego mi brakuje?
Czy jest inaczej w Pythonie 3, gdzie 'super()' bez żadnych argumentów jest zwykłym sposobem wywołania tego w zwykłej metodzie? Miałem ten sam problem w Python3, gdy nazywam 'super(). Foo()'. – gerrit
@gerrit: zero-argument Pythona 3 'super()' działa tylko w metodach klasy lub instancji. Wynika to z magii, której używa do określenia klasy, w której jest on zdefiniowany. W statycznych metodach (tak jak w zwykłych funkcjach na poziomie modułu) nadal potrzebujesz dwóch jawnych argumentów. (Forma pojedynczego argumentu również pozostaje niezwiązana w Pythonie 3.) –