2016-11-09 7 views
2

例えば、私はクラスを定義します。Pythonの__name__の検索プロパティ戦略は、通常の戦略とどのように違うのですか?

['__class__','__delattr__','__dict__','__doc__','__format__','__getattribute__', '__hash__', '__init__', '__module__', '__new__','__reduce__','__reduce_ex__', '__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','__weakref__'] 

印刷テスト:

class Test(object): 
    pass 
print dir(Test) 

は、次の結果を得ます。次のような結果gettting : テスト

私の質問には一切名前がテストに存在しないで、なぜテストを印刷することができます。 の名前、検索のストラタジーはの名前はです。

いずれかの回答がありがとう、ありがとう!

答えて

0

__name__typeタイプに定義されているので、それはTest.__class__dirにあります:何かがそれは、そのメタクラスでルックアップさクラス(typeのインスタンス)で見つけることができない場合

>>> Test.__name__ 
'Test' 
>>> Test.__class__ 
<type 'type'> 
>>> dir(Test.__class__) 
[..., '__mro__', '__name__', '__ne__', ...] 

クラスは(通常)typeです。

+0

関数dir()は、オブジェクトがその基本クラスから定義または継承したすべてのプロパティをリストしませんか? – MayflowerYuan

+0

はい、その基底クラスで定義されているすべてのプロパティ。しかし、dir(Test)は 'class'オブジェクトのプロパティを返しています。 'class'自体はそれ自体"基本クラス "を持たず、単に' type'というメタクラスを持っています。 –

+0

ああ、私はdir()は、その基本クラスのすべてのプロパティをリストしないことを理解しています。 Test .__ name__を実行すると、プロパティ検索戦略は__name__の基本クラスに徐々に移行します。大変ありがとう@セバスチャン・ウォズニー – MayflowerYuan

関連する問題