Javaではstaticメソッドはオーバーライドできないとされています。
たとえば、以下のようなコードはオーバーライドではないとされています。
(オーバーライドではなく、隠蔽(hiding)であるとされる)

class A {
    public static void a() { 
        System.out.println("A.a()");
    }
}   

class B extends A {
    public static void a() {
        System.out.println("B.a()");
    }
}

一方、Pythonで似たようなコードを書いてみます。

class A(object): 
    @staticmethod
    def a():
        print("A.a()")

class B(A):
    @staticmethod
    def a():
        print("B.a()")

これはオーバーライドなのでしょうか?

質問:

  • 上記のPythonコード例はオーバーライドと考えるべきか否か? その判断の根拠は?
  • staticmethodではなく、classmethodや普通のメソッドの場合は?
  • 一般に動的言語でどう考えるべきか?