7

いくつかの機能を持つクラスがある場合:

class Example:

    def func1(self):
        print 'Hi1'
    def func2(self):
        print 'Hi2'
    def func3(self):
        print 'Hi3'

'Example'のインスタンスを複数作成した場合、各インスタンスはクラス内の関数の独自のコピーを保存しますか?または、Pythonには、定義を1回だけ保存し、インスタンスがクラス内の関数を使用するたびにそれを検索するスマートな方法がありますか?

また、静的関数はどうですか?クラスは各静的関数のコピーを1つだけ保持しますか?

4

2 に答える 2

15

クラスをインスタンス化するとき、インスタンスメソッドでも静的メソッドでも、新しい関数オブジェクトは作成されません。を介してインスタンスメソッドにアクセスするobj.func1と、「バインドされたメソッド」と呼ばれる新しいラッパーオブジェクトが作成され、必要な期間だけ保持されます。ラッパーオブジェクトは軽量で、基本的に、基になる関数オブジェクトとインスタンスへのポインターが含まれています(self関数が呼び出されたときにパラメーターとして渡されます)。

staticmethodPythonでは、ほとんどの場合、使用は間違いであることに注意してください。それは歴史的な間違いにその存在を負っています。静的メソッドが必要だと思われる場合は、通常、モジュールレベルの関数が必要です。

于 2012-08-13T17:46:00.657 に答える
0

関数は、静的および非静的の両方でクラスに「格納」されます。

于 2012-08-13T17:46:22.997 に答える