为什么 Class 的这种用法在 Python 中有效?

Why Does This Usage of a Class Work in Python?

我运行以下非常琐碎的Python代码。我很惊讶它居然运行。有人可以向我解释为什么我什至可以为 "nd" 和 "hel" 赋值而无需在 class 定义中定义它们吗?这是因为可以在实例级别添加属性吗?

class tempClass(object):

a = tempClass()
a.nd = 1
a.hel = 'wem3'

Python 没有变量声明的概念,只有赋值。这同样适用于属性:您只需分配一个初始值即可使其存在。

__init__方法在这方面没有什么特别之处。例如,

class TempClass(object):
    def __init__(self):
        self.nd = 1

a = tempClass()
a.hel = 'wem3'

两个属性的创建方式相同:为它们赋值。 __init__a 首次创建时被调用,但除此之外并不特殊。 __init__里面的self是对a引用的对象的引用,所以self.nd = 1等同于a.nd = 1。创建对象后,a.hel 由同一过程创建并用 'wem3' 初始化。