class Boo():传递var1 = Boo var1.x = 4这怎么可能

时间:2017-05-05 19:54:28

标签: python

class Boo():
    pass

var1 = Boo
var1.x = 4

但Boo中没有x,它从未被宣布过!这怎么可能?

- 编辑 -

哇,这是令人兴奋的,你可以做到这一点!

1 个答案:

答案 0 :(得分:2)

默认情况下,类具有__dict__,正是为此目的(运行时分配和属性修改)。常规属性赋值只是在其中放置相应的名称和值。

它与在课堂定义时设置它没有什么不同,真的:

>>> class Boo:
...     x = 1
...     
>>> Boo.y = 2
>>> Boo.__dict__
mappingproxy({'__dict__': <attribute '__dict__' of 'Boo' objects>,
              '__doc__': None,
              '__module__': '__main__',
              '__weakref__': <attribute '__weakref__' of 'Boo' objects>,
              'x': 1,
              'y': 2})

这样,您可以在已经定义类之后向类提供方法和变量,并且它将影响该类的预先存在的实例。如果您听说有人说Python是一种动态编程语言,那么您在这里看到的是dynamic在这种情况下实际意味着什么的一个方面。