9

Python クラス オブジェクトが割り当てられている変数と__name__そのクラス オブジェクトの属性との関係を理解し​​ようとしています。例えば:

In [1]: class Foo(object):
   ...:     pass
   ...: 

In [2]: Foo.__name__ = 'Bar'

In [3]: Foo.__name__
Out[3]: 'Bar'

In [4]: Foo
Out[4]: __main__.Bar

In [5]: Bar
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-962d3beb4fd6> in <module>()
----> 1 Bar

NameError: name 'Bar' is not defined

そのため、クラスの属性を変更したようですが__name__、その名前で参照することはできません。これは少し一般的ですが、 と の関係を誰か説明できFooますFoo.__name__か?

4

4 に答える 4

10

それは簡単です。関係は全くありません。

クラスを作成すると、使用した名前でローカル変数が作成され、クラスを指して使用できるようになります。

クラスは__name__、その変数の名前を含む属性も取得します。これは、ピクルス化などの特定の場合に便利だからです。

ローカル変数を別のものに設定したり、__name__変数を変更したりできますが、酸洗いなどは機能しないため、そうしないでください。

于 2013-08-20T04:03:49.063 に答える
0

Python では、クラスは他のオブジェクトと同様に単なるオブジェクトであることを覚えておく必要があります。オブジェクトを参照する変数にリンクされた属性がオブジェクトに含まれていても意味がありません。これは、オブジェクトを参照する変数名がいくつでも存在する可能性があるためです。割り当て ( Bar = Foo) を記述したり、関数にオブジェクトを渡したりすると、新しい参照が作成されます。当然のことながら、すべてのオブジェクトは参照方法とは無関係でなければなりません。

__name__クラスオブジェクトに添付された単なる情報であり、最初に割り当てられた変数名と同じです。

于 2013-08-20T05:14:56.497 に答える