2

a次のようなクラスとメソッドを定義すると、次のbようになります。(Python2.7の場合)

class a:
    def b():
        print("hello")

このメソッドを呼び出すこともできません

 a.b()

または:

a_instance = a(); a_instance.b()

私の質問は次のとおりです。

(1)bを呼び出す方法はありますか?

(2)この使い方に意味があるという状況はありますか?

static method(3)bはaでもaでもないと思いますinstance method。ですか?b_ class methodそうでない場合は、何に名前を付ける必要がありbますか?

4

3 に答える 3

3

b静的メソッドです。@staticmethodデコレータを追加するだけです。

class a:
    @staticmethod
    def b():
        print("hello")

また、実際にはこれを行うべきではありませんがb()、クラスを変更せずに呼び出したい場合は、行うことができますa().b.__func__()

于 2013-01-06T15:24:34.013 に答える
3

または、classmethodクラスオブジェクトを最初のインスタンスとして受け取るデコレータ。

bを呼び出す方法はありますか?

はい、静的メソッドまたはインスタンスメソッドのいずれかにして、それに応じて呼び出すことができます。以下では、静的メソッドにして、任意のインスタンスで、またはクラスオブジェクトで直接呼び出すことができるようにしますa

class a:
    @classmethod
    def b(cls):
        print("hello")

a.b() #'hello'

この使用法が意味のある状況はありますか?

どのような使用法ですか?静的メソッド?はい、あります。アーキテクチャによって異なります。classmethodsはファクトリ関数として使用できますか?クラスの新しいインスタンスを返します。

bは静的メソッドでもインスタンスメソッドでもないと思います。baクラスメソッドですか?そうでない場合、bには何という名前を付ける必要がありますか?

私もそうは思いません。クラス本体の中で定義された関数だと思います

クラス内で関数を定義することについて混乱し、ここで同様の質問をしました

于 2013-01-06T15:25:40.643 に答える
0

これが明らかでない場合に備えて:

class a:
   def b(self):   # a normal "instance method" -- note "self"
       print("hello")

aa = a()   #  an instance

aa.b()     # call with no parameters

ここでは、クラスのインスタンスで呼び出されたときに暗黙的に示されるbため、パラメータはありません。self

于 2013-01-06T16:54:47.153 に答える