Python:静态变量(或,两者之间的差异类.一些以及测量值)

2024-10-03 21:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了简单的课程

class Test:

    stat = 0

    def __init__(self):
        self.inst = 10

    def printa(self):
        print Test.stat
        print self.inst

现在我已经创建了这个类的两个对象

^{pr2}$

当我说a.printa()b.printa()时,它输出{},这是可以理解的。在

但当我说

$ a.stat = 2
$ print a.stat

它会输出的

2

但当我说a.printa() 它会输出的

1
10

objInstance.staticVar和{}有什么区别??它在内部做什么?在


Tags: 对象testselfinitdefstatclass课程
2条回答

通过

1
10

我想你是说

^{pr2}$

因为类变量stat从未更改过。在

为了回答您的问题,它这样做是因为您向a对象添加了一个实例成员变量stat。您的objInstance.staticVar根本不是静态变量,而是您添加的新变量。在

除非您做了一些事情来更改属性赋值的工作方式(使用__setattr__或描述符),否则赋值给some_object.some_attribute总是分配给一个实例属性,即使已经有一个具有该名称的类属性。在

因此,当你

a = Test()

a.stat是class属性。但在你这么做之后

^{pr2}$

a.stat现在引用实例属性。类属性不变。在

相关问题 更多 >