class A(object):
def __init__(self, val):
self.val = A.plus_one(val)
@staticmethod
def plus_one(val):
return val + 1
クラス内に静的メソッドを定義し、任意の場所で使用できます。私の質問は、なぜこのクラス内でこの静的メソッドを使用しても、つまりメソッド名の前にA.
を追加しても、静的メソッドの名前空間を確保する必要があるということです。なぜPythonで静的メソッドの名前空間を使用しますか?
私の考えは、クラス内の静的メソッド名は、のように名前空間である必要はありませんように、我々は単にメカニズムを変更することができ、次のとおりです(Pythonは今それをサポートしていませんが):
class A(object):
def __init__(self, val):
self.val = plus_one(val)
@staticmethod
def plus_one(val):
return val + 1
マイ直感は、クラス内から呼び出すので、クラスメンバーの優先順位はグローバル関数よりも高くなければならず、したがってあいまいさはありません。なぜPythonが名前空間を強制するのですか?
Pythonでは強制しません。 「裸の」機能を定義することもできます。しかし、静的メソッドを使用すると、コードを整理する追加のレイヤーが可能になります。 – Keith
@キース私はあなたがその質問を誤解していると思う。それは静的メソッドを呼び出すことに関するものです。 (私も混乱していました) –
3つの考え:1)別の方法で、同じ名前のトップレベルメソッドを呼び出すことができますか? 2) 'member()'を呼び出す代わりに 'self.member()'を使う必要があります。 3)静的メソッドでさえ過負荷になる可能性があるので、 'self.plus_one'と' A.plus_one'の間には潜在的な違いがあります。どちらを呼びますか? –