news 2026/6/7 22:02:32

Python - 类属性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python - 类属性

类内定义的属性或变量被称为属性。属性提供关于类所包含数据类型的信息。Python 中有两种属性类型,分别是实例属性类属性

实例属性定义在 Python 类的构造器中,并且对该类的每个实例都是唯一的。而且,类属性会在类的构造子之外声明并初始化。

类属性(变量)

类属性是指属于某个类且其值在该类所有实例间共享的变量。类属性对该类的每个实例保持不变。

类属性在类中定义,但不在任何方法之外。它们不能在 __init__() 构造器中初始化。除了对象外,还可以通过类名访问它们。换句话说,类属性既对类可用,也对其对象开放。

访问类属性

对象名后加上点符号(.)用于访问类属性。

示例

下面的示例演示了如何访问 Python 类的属性。

class Employee: name = "Bhavesh Aggarwal" age = "30" # instance of the class emp = Employee() # accessing class attributes print("Name of the Employee:", emp.name) print("Age of the Employee:", emp.age)

输出

Name of the Employee: Bhavesh Aggarwal Age of the Employee: 30

修改类属性

要修改类属性的值,我们只需用类名和点符号和属性名为其分配一个新值。

示例

在下面的例子中,我们初始化一个名为empCount的类变量,位于Employee类中。对于每个声明的对象,__init__() 方法会自动调用。该方法初始化实例变量,并将empCount递增1。

class Employee: # class attribute empCount = 0 def __init__(self, name, age): self.__name = name self.__age = age # modifying class attribute Employee.empCount += 1 print ("Name:", self.__name, ", Age: ", self.__age) # accessing class attribute print ("Employee Count:", Employee.empCount) e1 = Employee("Bhavana", 24) print() e2 = Employee("Rajesh", 26)

输出

我们已经宣布了两个对象。每次empCount都会增加1。

Name: Bhavana , Age: 24 Employee Count: 1 Name: Rajesh , Age: 26 Employee Count: 2

类别属性的重要性

类属性的重要性有以下原因:

  • 它们用于定义类的属性,这些属性应对该类的每个对象具有相同的取值。
  • 类属性可用于设置对象的默认值。
  • 这在创建单元素集时也很有用。它们是只实例化一次,并在代码的不同部分使用对象。

内置属性

每个 Python 类都保留以下内置属性,并且像其他属性一样,可以通过点算子访问它们 −

  • __dict__− 包含类命名空间的词典。

  • __doc__− 类文档字符串或无类别文档,若未定义。

  • __name__− 类别名称。

  • __module__− 定义该类的模块名称。该属性在交互模式下为“__main__”。

  • __bases__− 一个可能为空的元组,包含基类,按基类列表中的出现顺序排列。

访问内置类属性

要访问 Python 内置的类属性,我们使用类名后接点(.),然后是属性名称。

示例

对于 Employee 类,我们尝试访问所有内置的类属性 −

class Employee: def __init__(self, name="Bhavana", age=24): self.name = name self.age = age def displayEmployee(self): print ("Name : ", self.name, ", age: ", self.age) print ("Employee.__doc__:", Employee.__doc__) print ("Employee.__name__:", Employee.__name__) print ("Employee.__module__:", Employee.__module__) print ("Employee.__bases__:", Employee.__bases__) print ("Employee.__dict__:", Employee.__dict__ )

输出

它将产生以下输出 −

Employee.__doc__: None Employee.__name__: Employee Employee.__module__: __main__ Employee.__bases__: (<class 'object'>,) Employee.__dict__: {'__module__': '__main__', '__init__': <function Employee.__init__ at 0x0000022F866B8B80>, 'displayEmployee': <function Employee.displayEmployee at 0x0000022F866B9760>, '__dict__': <attribute '__dict__' of 'Employee' objects>, '__weakref__': <attribute '__weakref__' of 'Employee' objects>, '__doc__': None}

实例属性

如前所述,Python 中的实例属性是专门针对类中单个对象的变量。它在 __init__() 方法中定义。

该方法的第一个参数是 self,利用该参数定义实例属性。

示例

在以下代码中,我们将演示实例属性的工作原理。

class Student: def __init__(self, name, grade): self.__name = name self.__grade = grade print ("Name:", self.__name, ", Grade:", self.__grade) # Creating instances student1 = Student("Ram", "B") student2 = Student("Shyam", "C")

输出

运行上述代码时,输出为 −

Name: Ram , Grade: B Name: Shyam , Grade: C

实例属性与类属性

下表展示了实例属性与类属性的区别 −

序号实例属性类属性
1它直接在 __init__() 函数中定义。它在类内定义,但在 __init__() 函数之外。
2实例属性通过对象名和点符号访问。类属性可以通过类名和对象名访问。
3该属性的值不能在其他对象之间共享。其价值与类的其他对象共享。
4对实例属性所做的更改只影响其所定义的对象。对类属性的更改会影响该类的所有对象。

类属性的注意事项

  • 避免通过实例修改类属性:如前文所述,通过实例修改类属性会创建同名实例属性,导致属性访问混乱,若需修改类属性,务必通过类名操作。

  • 私有类属性的访问限制:私有类属性(__属性名)仅能在类内部访问,外部强制访问(_类名__属性名)会破坏封装性,不推荐使用。

  • 类属性与实例属性同名时的优先级:若实例拥有与类属性同名的实例属性,实例会优先访问自己的实例属性(屏蔽类属性),如需访问类属性,需通过类名指定。

  • 动态添加类属性:Python支持在类定义后,通过“类名.新属性名 = 属性值”动态添加类属性,添加后所有实例均可访问该新属性。

总结

Python类属性是类本身的属性,被所有实例共享,其核心价值在于“统一管理公共数据”。定义类属性时需放在类体内部、所有方法之外;访问类属性推荐通过类名,也可通过实例;修改类属性必须通过类名;私有类属性需通过类内部访问。

类属性与实例属性的核心区别在于“共享性”和“归属对象”,合理使用类属性可简化代码、便于维护,常见于存储公共配置、统计实例个数、实现单例模式等场景。掌握类属性的使用规则,能帮助我们更高效地进行Python面向对象编程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 2:23:29

超级应用(Super Apps)整合多模态AI能力

超级应用的定义与特点 超级应用指通过单一平台提供多样化服务&#xff08;如社交、支付、出行、购物等&#xff09;的应用程序&#xff0c;典型代表包括微信、支付宝、Grab等。其核心特点是高度集成化&#xff0c;通过开放API或小程序生态连接第三方服务&#xff0c;形成闭环用…

作者头像 李华
网站建设 2026/6/6 15:09:50

基于Java+SpringBoot+SSM顺丰仓储管理信息系统(源码+LW+调试文档+讲解等)/顺丰物流信息系统/顺丰仓储系统/顺丰管理系统/仓储管理软件/仓储信息系统/物流仓储管理/顺丰信息技术

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/6/6 23:04:38

Excalidraw播客访谈邀请名单:行业KOL筛选

Excalidraw播客访谈邀请名单&#xff1a;行业KOL筛选 在一场远程技术评审会议中&#xff0c;团队成员各自盯着屏幕&#xff0c;试图通过文字描述解释一个复杂的微服务架构。有人发了一句&#xff1a;“网关后面接认证中心&#xff0c;然后分流到订单和库存服务……”——但没人…

作者头像 李华
网站建设 2026/6/5 12:20:46

Excalidraw报警阈值设定:CPU/内存/延迟

Excalidraw报警阈值设定&#xff1a;CPU/内存/延迟 在现代技术团队的日常协作中&#xff0c;可视化工具早已不再是“锦上添花”&#xff0c;而是不可或缺的生产力引擎。Excalidraw 以其极简的手绘风格和强大的实时协同能力&#xff0c;迅速成为架构设计、产品脑暴和系统建模中…

作者头像 李华
网站建设 2026/6/5 12:22:03

Excalidraw案例大赛征集令:优秀作品展示

Excalidraw案例大赛征集令&#xff1a;优秀作品展示 在远程办公成为常态的今天&#xff0c;团队沟通中的“信息不对称”问题愈发突出。一张清晰的架构图胜过千言万语&#xff0c;但传统绘图工具往往门槛高、流程僵化——设计师精心打磨的规整图表&#xff0c;反而让非技术人员望…

作者头像 李华
网站建设 2026/6/6 13:07:16

Excalidraw网络抖动下的操作同步表现测试

Excalidraw网络抖动下的操作同步表现测试 在远程协作日益成为工作常态的今天&#xff0c;团队对实时协同工具的依赖达到了前所未有的高度。尤其是在产品设计、系统架构讨论和敏捷开发过程中&#xff0c;一个稳定、流畅的虚拟白板往往决定了会议效率的高低。Excalidraw 作为一款…

作者头像 李华