提问人:ArkanSaaS 提问时间:3/3/2022 最后编辑:martineauArkanSaaS 更新时间:3/3/2022 访问量:38
类变量的作用域?
Scope of Class Variables?
问:
您好,我有一个安装在 site-packages 文件夹中的模块。该模块包含一个类,该类主要由类变量和静态方法(没有实例方法)组成,其形式如下
class C1:
name = 'C1'
todos = []
tasks = {}
@classmethod
def f1(cls) -> None:
pass
@staticmethod
def f2(cls) -> None:
pass
等。类变量以及列表和字典在方法中进行操作。现在我看到另一个类(比方说)(也在 site-pacakges 中)使用这个类。Now 用作其他类的基类。我的问题是:所有这些类实例会共享这些类变量吗?C2
C1
C2
C1
我无法理解范围界定。有人可以指导我举个好例子吗?
答:
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
没错,没错
评论