Pythonのメソッドはオーバーライドされているのか
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や普通のメソッドの場合は?
- 一般に動的言語でどう考えるべきか?