如何理解python中面向对象的类属性和实例属性?
off999 2025-07-03 18:49 4 浏览 0 评论
类属性和实例属性
类属性 就是 给 类对象 中定义的 属性
通常用来记录 与这个类相关 的特征
类属性 不会用于记录 具体对象的特征
类属性的理解:
类属性是与类自身相关联的变量,而不是与类的实例关联。它们通常存储在类对象的命名空间内,并且对所有该类的实例共享。
实例属性的理解
实例属性是与特定类的实例(即对象)关联的变量。每个对象都有其独立的一份实例属性副本,也就是说当创建一个类的不同实例时,这些实例可以拥有不同的属性值。
类属性
实例需求
定义一个工具类
每个工具都有自己的name
需求--知道使用这个类,创建了多少个工具对象
代码
class Tool(object):
#使用赋值语句定义类属性 记录所有工具对象的数量
count = 0 #类属性
def __init__(self,name):
self.name = name
#每次调用初始化方法 让类属性的值进行 + 1
Tool.count += 1
#1、创建工具对象
tool = Tool('斧头')
tool = Tool('锤子')
tool = Tool('水桶')
print(tool.count)
上面的代码 ,类中定义了类属性,每次类实例化的时候,都会对类属性+1。
所以创建对象的时候,调用了三次,这就意味着类的实例化了三次,所以最后输出结果为3;
类属性的特点
1、定义和访问:
- 类属性是在类定义内部直接声明的,无需创建任何实例即可访问。
- 定义类属性的方式与定义实例属性相似,但类属性是在类作用域内,例如:
class MyClass:
class_attribute = "这是一个类属性"
# 直接通过类名访问类属性
print(MyClass.class_attribute)
2、共享性:
- 所有该类的实例都可以访问到这个类属性,而且同一个类的所有实例共享同一份类属性。
- 如果通过实例修改了类属性,会影响到该类所有其他实例对该属性的访问结果。
3、与实例属性的区别:
- 实例属性是每个类实例自己独有的,即每个实例可以有自己的属性值,而类属性是所有实例共有的。
- 实例属性通常在 __init__ 方法或者其他实例方法中初始化,并且绑定到 self 参数(实例本身)上。
4、实例
class Dog:
species = "Mammal" # 这是一个类属性
def __init__(self, name):
self.name = name # 这是一个实例属性
# 创建两个Dog实例
dog1 = Dog("Rex")
dog2 = Dog("Bella")
# 访问类属性
print(dog1.species) # 输出: Mammal
print(dog2.species) # 输出: Mammal
# 修改类属性,会影响到所有实例
Dog.species = "Canine"
print(dog1.species) # 输出: Canine
print(dog2.species) # 输出: Canine
# 类属性与实例属性并存
print(dog1.name) # 输出: Rex
print(dog2.name) # 输出: Bella
实例属性的特点
1、定义和绑定:
- 实例属性通常在类的 __init__ 方法或其他实例方法中定义并初始化。
- 绑定实例属性的方式是通过使用 self 关键字,self 是指向当前实例的一个引用,在方法内部访问或修改实例属性时会用到它。
class Dog:
def __init__(self, name, age):
self.name = name # 定义并初始化实例属性name
self.age = age # 定义并初始化实例属性age
my_dog = Dog("Rex", 3)
print(my_dog.name) # 输出: Rex
2、内存分配:
每个实例都有自己独立的内存空间来存储实例属性,因此不同实例间的同名属性互不影响。
3、动态性:
- Python是一种动态类型语言,可以在实例的生命周期内随时添加、修改或删除实例属性,即使在类定义时没有预先声明这些属性。
4、访问控制:
- 默认情况下,所有实例属性都是公开的,可以直接读取和修改。如果需要控制访问权限,可以使用特殊方法如 __getattr__, __setattr__ 和 __delattr__ 或者通过私有属性(在属性名前加两个下划线 _ _)实现。
- 上一篇:Java程序员,一周Python入门:面向对象(OOP) 对比学习
- 已经是最后一篇了
相关推荐
- 如何理解python中面向对象的类属性和实例属性?
-
类属性和实例属性类属性就是给类对象中定义的属性通常用来记录与这个类相关的特征类属性不会用于记录具体对象的特征类属性的理解:类属性是与类自身相关联的变量,而不是与类的实例关联。它们通...
- Java程序员,一周Python入门:面向对象(OOP) 对比学习
-
Java和Python都是**面向对象编程(OOP)**语言,无非是类、对象、继承、封装、多态。下面我们来一一对比两者的OOP特性。1.类和对象Java和Python都支持面向对象...
- 松勤技术精选:Python面向对象魔术方法
-
什么是魔术方法相信大家在使用python的过程中经常会看到一些双下划线开头,双下划线结尾的方法,我们把它统称为魔术方法魔术方法的特征魔术方法都是双下划线开头,双下划线结尾的方法魔术方法都是pytho...
- [2]Python面向对象-【3】方法(python3 面向对象)
-
方法的概念在Python中,方法是与对象相关联的函数。方法可以访问对象的属性,并且可以通过修改对象的属性来改变对象的状态。方法定义在类中,可以被该类的所有对象共享。方法也可以被继承并重载。方法的语法如...
- 一文带你理解python的面向对象编程(OOP)
-
面向对象编程(OOP,Object-OrientedProgramming)是一个较难掌握的概念,而Python作为一门面向对象的语言,在学习其OOP特性时,许多人都会对“继承”和“多态”等...
- 简单学Python——面向对象1(编写一个简单的类)
-
Python是一种面向对象的编程语言(ObjectOrientedProgramming),在Python中所有的数据类型都是对象。在Python中,也可以自创对象。什么是类呢?类(Class)是...
- python进阶突破面向对象——四大支柱
-
面向对象编程(OOP)有四大基本特性,通常被称为"四大支柱":封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)和抽象(Abstrac...
- Python学不会来打我(51)面向对象编程“封装”思想详解
-
在面向对象编程(Object-OrientedProgramming,简称OOP)中,“封装(Encapsulation)”是四大核心特性之一(另外三个是继承、多态和抽象),它通过将数据(属性)和...
- Python之面向对象:对象属性解析:MRO不够用,补充3个方法
-
引言在前面的文章中,我们谈及Python在继承关系,尤其是多继承中,一个对象的属性的查找解析顺序。由于当时的语境聚焦于继承关系,所以只是简要提及了属性解析顺序同方法的解析顺序,而方法的解析顺序,在Py...
- Python之面向对象:通过property兼顾属性的动态保护与兼容性
-
引言前面的文章中我们简要提及过关于Python中私有属性的使用与内部“名称混淆”的实现机制,所以,访问私有属性的方法至少有3种做法:1、使用实例对象点操作符的方式,直接访问名称混淆后的真实属性名。2、...
- Python之面向对象:私有属性是掩耳盗铃还是恰到好处
-
引言声明,今天的文章中没有一行Python代码,更多的是对编程语言设计理念的思考。上一篇文章中介绍了关于Python面向对象封装特性的私有属性的相关内容,提到了Python中关于私有属性的实现是通过“...
- Python中的私有属性与方法:解锁面向对象编程的秘密
-
Python中的私有属性与方法:解锁面向对象编程的秘密在Python的广阔世界里,面向对象编程(OOP)是一种强大而灵活的方法论,它帮助我们更好地组织代码、管理状态,并构建可复用的软件组件。而在这个框...
- Python 面向对象:掌握类的继承与组合,让你的代码更高效!
-
引言:构建高效代码的基石Python以其简洁强大的特性,成为众多开发者首选的编程语言。而在Python的面向对象编程(OOP)范畴中,类的继承和组合无疑是两大核心概念。它们不仅能帮助我们实现代码复用,...
- python进阶-Day2: 面向对象编程 (OOP)
-
以下是为Python进阶Day2设计的学习任务,专注于面向对象编程(OOP)的核心概念和高阶特性。代码中包含详细注释,帮助理解每个部分的实现和目的。任务目标:复习OOP基础:类、对象、继...
- 外婆都能学会的Python教程(二十八):Python面向对象编程(二)
-
前言Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行。下面是Python的入门教程介绍...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python重命名文件 (54)
- python面向对象编程 (60)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)