类变量实例化过程

时间:2018-05-22 10:01:47

标签: python

如图所示:

pic1

In [1]: from datetime import datetime

In [2]: class A(object):
   ...:     now = datetime.now()
   ...:     def __init__(self):
   ...:         pass
   ...:     def p(self):
   ...:         print(self.now)
   ...:

In [3]: datetime.now()
Out[3]: datetime.datetime(2018, 5, 22, 17, 54, 4, 593295)

In [4]: a_1 = A()

In [5]: a_1.p()
2018-05-22 17:53:57.597022

In [6]: datetime.now()
Out[6]: datetime.datetime(2018, 5, 22, 17, 54, 29, 177489)

In [7]: a_2 = A()

In [8]: a_2.p()
2018-05-22 17:53:57.597022

我无法理解Python如何初始化类变量,以及为什么我创建了两个类对象,但这两个类的类变量的值是否相同?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

@Mike Scotty的评论是正确的,但为了清晰起见需要扩大。

当设置变量而没有self时。在类体中它前面是类变量,它们在类的所有实例中都具有相同的值。如果您需要与实例相关的变量,则需要在方法中初始化它们,最好是 init ,并在名称前加上'self。'。

所以你的班级定义应该是:

class A(object):
    def __init__(self):
        self.now = datetime.now()
    def p(self):
        print(self.now)