类变量的范围



你好,我有一个模块安装在site packages文件夹中。该模块包含一个类,该类主要由类变量和静态方法组成(没有实例方法(,形式为

class C1:
name = 'C1'
todos = []
tasks = {}
@classmethod
def f1(cls) -> None:
pass
@staticmethod
def f2(cls) -> None:
pass

等等。类变量以及列表和dict都是在方法中操作的。现在我看到另一个类(比如C2((也在站点包中(使用这个类C1。现在C2被用作其他类的基类。我的问题是:C1中的这些类变量会被所有这些类实例共享吗?

我无法理解范围界定。有人能给我举个好榜样吗。

是的,这些值将在C1实例之间共享,它们是类属性。您使用类名和属性来使用它们:

C1.name  # "C1"

但是,您可以使用self:覆盖单个实例的值

# Inside of a method
self.name = "A particular C1"

此外,当使用继承时,class属性仍然可以通过子类访问:

class Super:
name = "Super"
class Sub(Super):
pass
print(Super.name)  # Super
print(Sub.name)  # Super

最新更新