百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

如何理解python中面向对象的类属性和实例属性?

off999 2025-07-03 18:49 57 浏览 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__ 或者通过私有属性(在属性名前加两个下划线 _ _)实现。

#python#

相关推荐

apisix动态修改路由的原理_动态路由协议rip的配置

ApacheAPISIX能够实现动态修改路由(DynamicRouting)的核心原理,是它将传统的静态Nginx配置彻底解耦,通过中心化配置存储(如etcd)+OpenRest...

使用 Docker 部署 OpenResty Manager 搭建可视化反向代理系统

在之前的文章中,xiaoz推荐过可视化Nginx反向代理工具NginxProxyManager,最近xiaoz还发现一款功能更加强大,界面更加漂亮的OpenRestyManager,完全可以替代...

OpenResty 入门指南:从基础到动态路由实战

一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...

OpenResty 的 Lua 动态能力_openresty 动态upstream

OpenResty的Lua动态能力是其最核心的优势,它将LuaJIT嵌入到Nginx的每一个请求处理阶段,使得开发者可以用Lua脚本动态控制请求的生命周期,而无需重新编译或rel...

LVS和Nginx_lvs和nginx的区别

LVS(LinuxVirtualServer)和Nginx都是常用的负载均衡解决方案,广泛应用于大型网站和分布式系统中,以提高系统的性能、可用性和可扩展性。一、基本概念1.LVS(Linux...

外网连接到内网服务器需要端口映射吗,如何操作?

外网访问内网服务器通常需要端口映射(或内网穿透),这是跨越公网与私网边界的关键技术。操作方式取决于网络环境,以下分场景详解。一、端口映射的核心原理内网服务器位于私有IP地址段(如192.168.x.x...

Nginx如何解决C10K问题(1万个并发连接)?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。Nginx是大型架构的必备中间件,下面我就全面来详解NginxC10k问题@mikechen文章来源:mikec...

炸场!Spring Boot 9 大内置过滤器实战手册:从坑到神

炸场!SpringBoot9大内置过滤器实战手册:从坑到神在Java开发圈摸爬滚打十年,见过太多团队重复造轮子——明明SpringBoot自带的过滤器就能解决的问题,偏偏要手写几十...

WordPress和Typecho xmlrpc漏洞_wordpress主题漏洞

一般大家都关注WordPress,毕竟用户量巨大,而国内的Typecho作为轻量级的博客系统就关注的人并不多。Typecho有很多借鉴WordPress的,包括兼容的xmlrpc接口,而WordPre...

Linux Shell 入门教程(六):重定向、管道与命令替换

在前几篇中,我们学习了函数、流程控制等Shell编程的基础内容。现在我们来探索更高级的功能:如何控制数据流向、将命令链接在一起、让命令间通信变得可能。一、输入输出重定向(>、>>...

Nginx的location匹配规则,90%的人都没完全搞懂,一张图让你秒懂

刚配完nginx网站就崩了?运维和开发都头疼的location匹配规则优先级,弄错顺序直接导致500错误。核心在于nginx处理location时顺序严格:先精确匹配=,然后前缀匹配^~,接着按顺序正...

liunx服务器查看故障命令有那些?_linux查看服务器性能命令

在Linux服务器上排查故障时,需要使用一系列命令来检查系统状态、日志文件、资源利用情况以及网络状况。以下是常用的故障排查命令,按照不同场景分类说明。1.系统资源相关命令1.1查看CPU使...

服务器被入侵的常见迹象有哪些?_服务器入侵可以被完全操纵吗

服务器被入侵可能会导致数据泄露、服务异常或完全失控。及时发现入侵迹象能够帮助你尽早采取措施,减少损失。以下是服务器被入侵的常见迹象以及相关的分析与处理建议。1.服务器被入侵的常见迹象1.1系统性能...

前端错误可观测最佳实践_前端错误提示

场景解析对于前端项目,生产环境的代码通常经过压缩、混淆和打包处理,当代码在运行过程中产生错误时,通常难以还原原始代码从而定位问题,对于深度混淆尤其如此,因此Mozilla自2011年开始发起并...

8个能让你的Kubernetes集群“瞬间崩溃”的配置错误

错误一:livenessProbe探针“自杀式”配置——30秒内让Pod重启20次现象:Pod状态在Running→Terminating→CrashLoopBackOff之间循环,重启间隔仅...

取消回复欢迎 发表评论: