2017-10-05 7 views
2
>>> class C: 
...  pass 
... 
>>> C.__dict__ 
mappingproxy({'__doc__': None, 
'__weakref__': <attribute '__weakref__' of 'C' objects>, 
'__dict__': <attribute '__dict__' of 'C' objects>, 
'__module__': '__main__'}) 
<attribute 'xxx' of 'C' objects>

'C'オブジェクトの `<attribute 'xxx>は` C .__ dict__`の出力で何を意味しますか?

  • C'C' objects平均インスタンスのでしょうか?
  • <attribute 'xxx' of 'C' objects>平均xxxは、Cのインスタンスの属性ですか?しかし、それはC.__dict__の属性としてCと記載されています。他の人がいる間

はなぜCのいくつかの属性(例えば__doc____module__)は、<attribute 'xxx' of 'C' objects>と言及されていませんか?


再: "ノート:<attribute ..>は基本的にこれらの記述子ののreprある"

<attribute ..>次の例に示されていないのはなぜ?

>>> class md: 
...  def __get__(self, obj, owner): 
...   return 3 
... 

>>> class CC: 
...  d=md() 
... 
>>> CC.__dict__ 
mappingproxy({'d': <__main__.md object at 0x7f7387f8c978>, ...}) 
+0

この質問は、 'C .__ class __.__ dict__'の出力を考慮するとさらに興味深いものです。 – Guillaume

+1

あなたはあなたの質問に敬礼を加えることが多いと気付きました。これは確かに相手と話すときは礼儀正しいと考えられますが、スタックオーバーフローの投稿にはノイズだけが加わります。 [_私の質問から感謝の気持ちを取り除いている同僚の人はいますか?_](https://meta.stackoverflow.com/questions/328379/why-are-fellow-users-removing-thank-yous-from-my-質問)を参照してください。 –

答えて

3

これらは、クラスCのインスタンスの属性(Cで実装記述子)計算さPyGetSetDescrObjectsです。あなたはこれらについて少し話しtp_getset in the C-APIを見てみることができ、Documentation on theseは最小限である(または私は:-)それを見つけるように見えることはできませんが、:

struct PyGetSetDef* PyTypeObject.tp_getset

静的へのオプションのポインタNULLで終了するPyGetSetDef構造体の配列この型のインスタンスの計算された属性を宣言する

配列の各エントリに対して、getset記​​述子を含む型の辞書(下記のtp_dictを参照)にエントリが追加されます。<attribute ..>を持っていない

オブジェクトは、(注意:<attribute ..>は基本的にこれらの記述子のreprある)単にディスクリプタ(__doc__ではありません__module__はの名前を保持しながら、定義されていない場合は、通常の文字列またはNoneですクラスが定義されたモジュール)。


再: "ノート:<attribute ..>は基本的にこれらの記述子ののreprある"

<attribute ..>次の例に示されていないのはなぜ?

私が見逃したこのアップデートに対処する。

これはPythonで実装された記述子で、デフォルトのreprを継承しているため、objectから継承されています。

Cで実装PyGetSetDescrObject秒のrepr機能は、主に(私が想定したい)と区別するために、異なるrepr使用しています。

+0

ありがとうございます。 "note:' 'は基本的にこれらの記述子のreprです。" 投稿に更新された例では、 ''が表示されないのはなぜですか? – Tim

+0

@Tim私は更新を気付いた、それを残念。私はあなたの質問に拡大する私の答えを更新しました。 –

関連する問題