Python静态类属性[重复]

Posted

技术标签:

【中文标题】Python静态类属性[重复]【英文标题】:Python Static Class attributes [duplicate] 【发布时间】:2014-12-07 10:26:45 【问题描述】:

是否有可能在 Python 中创建一个类的静态属性,该属性对于该类的所有实例(对象)都是相同的,它们都将使用对该属性的相同引用而不创建自己的属性。

例如:

class myClass:
    __a = 0

    def __init__(self, b, c):
        self.b = b
        self.c = c

    def increase_A(self):
        self.__a += 1
        return

    def get_A(self):
        return self.__a

如果我有

myObject1 = myClass(1,2)
myObject2 = myClass(3,4)

myObject2.increase_A()

print myObject1.get_A()  

将显示 one 而不是 zero,因为它们共享相同的变量?

【问题讨论】:

当你尝试它会发生什么? 【参考方案1】:

要使您的代码按预期工作,请使用myClass.__a 而不是self.__a 来访问变量。

def increase_A(self):
    myClass.__a += 1
    return

def get_A(self):
    return myClass.__a

【讨论】:

【参考方案2】:

它们从同一个变量开始。但是,当你这样做时

self.__a += 1

这会将对象的__a 重新绑定到值为1 的新对象。

它不会更改任何其他对象的__a,因此代码将打印出0

【讨论】:

以上是关于Python静态类属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

绑定到静态类属性[重复]

Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法

Python类的静态属性类方法静态方法

Python_静态属性类方法静态方法

Python类-静态方法类方法属性方法