Python - 内置变量/属性的初始化
内置属性是什么时候以及如何被初始化的呢?比如说 __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
继承来的。