网站首页 > 技术文章 正文
类属性和实例属性
类属性 就是 给 类对象 中定义的 属性
通常用来记录 与这个类相关 的特征
类属性 不会用于记录 具体对象的特征
类属性的理解:
类属性是与类自身相关联的变量,而不是与类的实例关联。它们通常存储在类对象的命名空间内,并且对所有该类的实例共享。
实例属性的理解
实例属性是与特定类的实例(即对象)关联的变量。每个对象都有其独立的一份实例属性副本,也就是说当创建一个类的不同实例时,这些实例可以拥有不同的属性值。
类属性
实例需求
定义一个工具类
每个工具都有自己的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__ 或者通过私有属性(在属性名前加两个下划线 _ _)实现。
猜你喜欢
- 2025-01-08 Python | 搞懂类的继承
- 2025-01-08 Python 类常用各种方法及区别
- 2025-01-08 python标识符
- 2025-01-08 站长在线Python教程:python中面向对象相关概述详解
- 2025-01-08 Python类的定义、封装、继承和多态
- 2025-01-08 深入探讨Python类函数的一些高级用法(封装)
- 2025-01-08 Python 知识点 #22 - 元类
- 2025-01-08 二、python类定义的讲解
- 2025-01-08 python 中实现接口类
- 2025-01-08 让我们详细学习下Python类吧!
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)