理解 Python 类和实例变量
在 Python 中,类和实例变量在定义和修改对象行为中起着至关重要的作用。然而,它们的独特特征可能会导致混乱。本文旨在阐明它们的差异,并解释为什么列表可以同时显示为类变量和实例变量。
类变量与实例变量
类变量声明于类级别并由该类的所有实例共享。它们通常在构造函数 (__init__()) 方法之外定义。另一方面,实例变量特定于每个实例,并使用 self 属性在构造函数中定义。
示例 1:类变量
以下代码创建一个带有类变量列表和实例变量 self.list 的类:
<code class="python">class testClass(): list = [] # Class variable def __init__(self): self.list.append('thing') # Instance variable</code>
在此示例中,testClass.list 是 testClass 的所有实例将共享的类变量。当调用构造函数时,它将“thing”附加到 self.list,为每个实例创建一个实例变量。因此,当您访问 p.list 和 f.list 时,它们都会输出 ['thing'],因为它们共享相同的类变量。
示例 2:实例变量
相反,当您删除 list 类变量并在构造函数中重新定义它时:
<code class="python">class testClass(): def __init__(self): self.list = [] self.list.append('thing')</code>
testClass 的每个实例现在都将拥有自己的 self.list 实例变量。当你调用 p.list 和 f.list 时,它们都会输出 ['thing'],但它们是单独的列表,在实例之间不共享。
Python 的变量解析
此行为是由于 Python 的变量解析过程造成的。当您访问 self.list 时,Python 首先检查实例对象中的名称列表。如果没有找到,它将搜索类定义。
在第一个示例中,self.list 解析为类变量,因为实例中没有定义列表名称。在第二个示例中,self.list 解析为实例变量,因为它是在构造函数中定义的。
结论
理解类变量和实例变量之间的差异至关重要有效地使用 Python 对象。类变量由所有实例共享,而实例变量特定于每个对象。 Python的变量解析过程决定了当你使用self.variable_name时访问哪个变量。
以上是以下是一些适合您文章内容的基于问题的标题: * Python 类变量和实例变量:为什么列表同时显示为两者? * 理解Python类和实例变量:的详细内容。更多信息请关注PHP中文网其他相关文章!