类变量的作用域?

Scope of Class Variables?

提问人:ArkanSaaS 提问时间:3/3/2022 最后编辑:martineauArkanSaaS 更新时间:3/3/2022 访问量:38

问:

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

class C1:

    name = 'C1'
    todos = []
    tasks = {}

    @classmethod
    def f1(cls) -> None:
        pass

    @staticmethod
    def f2(cls) -> None:
        pass

等。类变量以及列表和字典在方法中进行操作。现在我看到另一个类(比方说)(也在 site-pacakges 中)使用这个类。Now 用作其他类的基类。我的问题是:所有这些类实例会共享这些类变量吗?C2C1C2C1

我无法理解范围界定。有人可以指导我举个好例子吗?

Python 范围 命名空间

评论


答:

0赞 aaossa 3/3/2022 #1

是的,这些值将在实例之间共享,它们是类属性。您可以使用类名和属性来使用它们: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

评论

1赞 ArkanSaaS 3/3/2022
因此,如果我在 1 个类中操作 C1.task 字典,所有使用 C1 类的类都将具有相同的修改字典?
0赞 aaossa 3/3/2022
没错,没错