2

組み込み属性はいつどのように初期化されますか? __doc____name__(私はこれについて知っていると思います:))、、__class__など__setattr__

docstringに関する他の質問では、回答の1つに、docstringは単なる単純な文字列であり、を試してみたところ、'すべて機能したとのことでした。しかし、文字列値が割り当てられた変数を使用し、その変数をdocstringの代わりに配置すると、機能しません。そのため、属性はいつ初期化されるのか疑問に思い始めました。""""__doc__

編集:これは私が通訳で試したものです(はい、これはクレイジーで、私は奇妙です:D)

doc_str = "Says Hello world"


class HelloWorld():
    def say():
        doc_str
        print("Hello world !")

h_w = HelloWorld()
h_w.say.__doc__


class AnotherHelloWorld():

    def __init__(self, doc_str="Says HELLO WORLD"):
        self.doc_str = doc_str

    def say(self):
        self.doc_str
        print("HELLO WORLD !")

a_h_w = AnotherHelloWorld("Scream... HELLO WORLD!")
a_h_w.say.__doc__


class YetAnotherHelloWorld():

    def __init__(self, doc_str="Still does't say HELLO WORLD :( "):
        self.doc_str = doc_str

    def say(self):
          "%s"%self.doc_str
          print("HELLO WORLD .. Again!")
4

1 に答える 1

2

それぞれ異なります。(結局のところ、それぞれが特別です!)いくつかはクラス属性であり、いくつかはインスタンス属性であり、いくつかは継承されます。

__doc__クラスが作成されるときに初期化されます(コンストラクターdictへの引数で渡すこともできます)。type特別な構文は文字列リテラルに対してのみ機能しますが、変数docstringが必要な場合は、明示的に設定できます。

class SomeClass(object):
    __doc__ = "This is class #{0}.".format(1)

__name__クラスの作成時にも設定されます。

__class__インスタンスが作成されたとき(つまり、で__new__)に設定されます。

__setattr__と友達はから継承されobjectます。

于 2011-10-07T13:58:45.457 に答える