2015-02-11 2 views
0

Можно ли вызвать статический метод, определенный в суперклассе, из метода в подклассе? Что-то вроде:Python: вызов статического метода из подкласса

class A: 
    @staticmethod 
    def a(): 
     ... 

class B(A): 
    def b(self): 
     A.a() 

A.a() не работает, ни делает B.a(), super.a() или self.a(). Есть ли способ сделать это?

EDIT: Проблема была в устаревшем файле .pyc !!!!!!

+1

http://ideone.com/KqRtv9: 'Аа()', 'Ba()', 'self.a()' , 'super (B, self) .a()' work. 'super(). a()' также будет работать в Python 3.x. – falsetru

+0

Почему бы не 'A.a()' работать? Это, в конце концов, определение статического метода. –

+0

@MalikBrahimi, не уверен, но когда я попробую это, я получаю: AttributeError: type object 'A' не имеет атрибута 'a' – Banana

ответ

-2
>>> class ABC(object): 
...  @staticmethod 
...  def staticMethod(x): 
...   print "in staticMethod:-", x 
... 
>>> class B(ABC): 
...  def b(self): 
...   ABC.staticMethod("From B") 
...   self.staticMethod("From B self") 
... 
>>> a = B() 
>>> a.b() 
in staticMethod:- From B 
in staticMethod:- From B self 
+2

staticmethods можно вызвать в экземплярах, чтобы вы не кодировали имя класса. –

+0

@brunodesthuilliers да, как этот 'self.staticMethod (« From B self »)' правильный? –

0

Работы для меня - за исключением, конечно, для super().whatever(), который работает только на Python 3.x. Пожалуйста, объясните, что вы имеете в виду под "не работает" ...

Python 2.7.3 (default, Dec 18 2014, 19:10:20) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> class Foo(object): 
... @staticmethod 
... def foo(what): 
...  print "Foo.foo(%s)" % what 
... 
>>> class Bar(Foo): 
... def bar(self): 
...  self.foo("from Bar.bar") 
... 
>>> b = Bar() 
>>> b.bar() 
Foo.foo(from Bar.bar) 
>>> Foo().foo("aaa") 
Foo.foo(aaa) 
>>> Foo.foo("aaa") 
Foo.foo(aaa) 
>>> b.foo("uuu") 
Foo.foo(uuu) 
+0

Если я пытаюсь использовать Aa(), я получаю: AttributeError: type object 'A' не имеет атрибута 'a' – Banana

+0

Если я попытаюсь с Ba(), я получаю: AttributeError: type object 'B' не имеет атрибута 'a' – Banana

+0

If Я пытаюсь с self.a(), я получаю AttributeError: объект «B» не имеет атрибута «a» – Banana

Смежные вопросы