Python - 内置变量/属性的初始化

2 投票
1 回答
546 浏览
提问于 2025-04-17 03:52

内置属性是什么时候以及如何被初始化的呢?比如说 __doc____name__(这个我想我知道了 :))、__class____setattr__ 等等。

在我之前关于文档字符串的问题中,有个答案提到文档字符串其实就是简单的字符串。我试了用 '"""",结果都可以用。但是当我用一个变量来存储字符串值,然后把这个变量放在文档字符串的位置时,它就不行了。这让我开始想,__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!")

1 个回答

2

每个东西都不太一样。(毕竟,每个东西都有它自己特别的地方!)有些是类的属性,有些是实例的属性,还有一些是继承来的。

__doc__是在类创建的时候初始化的(你也可以在创建类的时候通过dict参数传入)。这种特殊的写法只适用于字符串字面量,但如果你需要一个变量作为文档字符串,可以手动设置:

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

__name__也是在类创建的时候设置的。

__class__是在创建实例的时候设置的(也就是在__new__里)。

__setattr__和其他类似的东西是从object继承来的。

撰写回答