2

次の Python コードでは:

class Foo:
    def bar(self):
        return 1

def baz():
    return Foo()

print baz().bar()

質問 0:

bar()で評価されるとprint baz().bar()Fooによって返されたインスタンスはbaz()まだガベージ コレクションされていません。

foo = baz()
print foo.bar()

インスタンスfooの参照を格納する場所。Foo

質問1:

Foo と baz が C で Python 拡張モジュールに実装されている場合baz、返されたオブジェクトの参照カウントをインクリメントしfooて 1 に設定する必要がありますか?

4

2 に答える 2

0

パート 0 の場合: baz が呼び出されるたびに、新しいオブジェクト Foo が作成されます。これは、Fooにinitを追加することで確認できます。したがって、出力前には Foo インスタンスは存在しません。(関数 baz が宣言されたときに作成されるのではなく、呼び出されたときにのみ作成されます。

パート 1: 0 と同様に、baz() を宣言してもオブジェクトは作成されません。baz() を呼び出すと実行されます。関数 baz が呼び出されるたびに 'Foo()' (コンストラクター) が呼び出されると、参照カウントがインクリメントされます。

于 2014-07-04T20:09:40.097 に答える