Python中类的属性、多继承、自省机制中的__mro__、__dict__ 和dir介绍

news2024/12/24 10:59:50

一、通过类名修改属性和通过类的实例去修改类的属性的区别

    在 Python 中,类的属性可以通过类名或类的实例访问和修改。但是,通过类名修改属性和通过类的实例修改属性之间有一些区别。通过类名修改属性实际上是修改类的属性。这意味着如果你修改了类的属性,那么所有这个类的实例都将受到影响

class Person(object):
    # 类属性
    name = "人类"




Person.name = "小博"
zs = Person()
ls = Person()
print(zs.name, ls.name)
以上案例运行后输出:小博 小博

    通过类的实例修改属性实际上是创建或修改实例的属性。这意味着如果你修改了一个实例的属性,那么只有这个实例会受到影响,而不会影响这个类的其他实例或类本身

class Person(object):
    # 类属性
    name = "人类"




zs = Person()
zs.name = "张三"
ls = Person()
print(zs.name,ls.name,Person.name)
以上代码运行输出:张三 人类 人类

二、多继承的调用顺序

class A:
    def foo(self):
        print("A's foo")




class B(A):
    def foo(self):
        print("B's foo")
        super().foo()




class C(A):
    def foo(self):
        print("C's foo")
        super().foo()




class D(B, C):
    pass




obj = D()
obj.foo()

以上代码运行之后输出如下:

B's foo
C's foo
A's foo

在python3的多继承时,方法解析顺序(MRO)是基于C3算法实现的,会保证解析的顺序是有序的。

三、类的__mro__属性介绍

正如上面的例子,如果你不知道调用顺序,在这里瞎猜的话,你试试

print(D.__mro__),然后就会看到如下输出:

(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

__mro__ 是一个特殊的属性,它是一个元组,表示了一个类的方法解析顺序(MRO),即查找属性和方法时所遵循的顺序。它是由 Python 在执行继承时自动计算出来的

四、python的自省机制介绍

Python 的自省机制(introspection)是指在运行时(runtime)获取对象的类型、属性、方法等信息的能力。Python 的自省机制非常强大,可以让开发人员在编写程序时更加灵活和高效。

下面列举几个python中提供的内置函数和特殊属性来支持自省机制:

__dict__ :用于存储一个对象的对象的属性和方法,__dict__ 属性允许程序在运行时动态地添加、修改和删除对象的属性和方法,从而实现反射和元编程等高级功能。

在 Python 中,对象的 __dict__ 属性通常可以修改,但有一些对象的 __dict__ 属性是只读的,不能直接修改。下面是一些常见的对象类型及其 __dict__ 属性的修改情况:

1、普通对象实例的 __dict__ 属性可以随意修改,允许动态添加、修改和删除对象的属性和方法

2、类、模块和一些内置对象(比如str)的 __dict__ 属性是只读的,因为类、模块的属性和方法是在定义时确定的,无法在运行时修改,内置对象的属性和方法是由解释器实现的,无法在运行时修改。

3、在 Python 中,int 和 str 对象是不可变对象,它们的 __dict__ 属性是不存在的。因为不可变对象的属性和方法是在定义时确定的,无法在运行时动态地添加、修改和删除,所以它们也不需要 __dict__ 属性来保存属性和方法。

f5b3fcfbf7f9f5dc49f65583d1f45a79.png

dir() 函数:获取对象的属性列表。例如,dir(obj) 可以返回对象 obj 的所有属性和方法的名称列表。

print(dir(str))

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

看完了上面的内容,留一个题目给屏幕前的你,看看以下代码运行后的输出结果是什么呢?

245670517c5cbe1b06257f842e56f109.png

如果看完我写的文章,有收获的话,欢迎点赞转发支持一下哟。想跟着小编一起学的小伙伴,可以私聊哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GrapeCity Documents for Word 6.1.0

GrapeCity Documents for Word 6.1.0 改进了聚合函数中多个表达式的使用。 特征 GcWord 模板&#xff1a; 现在可以使用表达式作为聚合函数的参数。表达式可以在函数中使用常量、聚合或两个集合。现在可以进行以下计算&#xff1a; 使用常量 - {{ calc Sum(2 ds.value)}}。在聚…

5.MapReduce概述

ps.实际生产环境中并不会使用mapReduce,而是spark和flink,但是它可以建立分布式的思想。 1.MapReduce框架 2.mapReduce小项目练习 ps.基本流程:一般都是在代码层面引入hadoop依赖,然后在windows环境下进行代码编写测试,没有问题的话,把代码打包成jar包,然后拖入xShell,利用…

基于单片机的电路特性测试仪的设计

摘 要 当今社会科技的飞速发展&#xff0c;智能和便捷已经成为人们的日常诉求。现在放大电路在使用过程中经常出现故障&#xff0c;并且需要测试电路数据&#xff0c;但是大多数是手动进行测试&#xff0c;一定程度上影响了工作效率。 为了测量数据更安全更便捷&#xff0c;针…

YOLOv8 更换主干网络之 GhostNetV2

《GhostNetV2:Enhance Cheap Operation with Long-Range Attention》 轻量级卷积神经网络(CNN)是专门为在移动设备上具有更快推理速度的应用而设计的。卷积操作只能捕捉窗口区域内的局部信息,这防止了性能的进一步提高。将自注意力引入卷积可以很好地捕捉全局信息,但这将大…

MySQL-----表的增删查改

文章目录 前言一、create1. 单行数据 全列插入2. 多行数据 指定列插入3. 插入冲突否则更新4. 替换 二、retrieve1. select列1.1 全列查询1.2 指定列查询1.3 查询字段为表达式1.4 为查询结果指定别名1.5 结果去重 2. where条件2.1 英语不及格的同学及英语成绩 ( < 60 )2.2 …

Google浏览器翻译无法正常使用解决

1.查找可用服务器地址 按WinR键打开运行→输入cmd回车&#xff0c;打开命令提示符→输入ping google.cn 回车。记录一下下图红框里的ip地址&#xff0c;一会要用到 最近自己ping出来的ip可能不能用了&#xff0c;可以尝试用下面的ip 142.251.163.90 142.250.113.90 142.251.…

springcloudfeign原理和流程

什么是Feign&#xff1f; Feign 的英文表意为“假装&#xff0c;伪装&#xff0c;变形”&#xff0c; 是一个http请求调用的轻量级框架&#xff0c;可以以Java接口注解的方式调用Http请求&#xff0c;而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解&am…

【Cisco Packet Tracer| 四.跨交换机VLAN实验】

文章目录 一.连接实验拓扑图并设置主机IP地址1.连接实验拓扑图2.设置主机的IP地址 二.划分VLAN前测试是否ping通三.划分VLAN1.给主机划分VLAN2.给交换机之间的f0/24端口从Access模式切换到Trunk模式 四.划分VLAN后测试是否ping通五.另一种测试方式-信封图标 一.连接实验拓扑图并…

nginx加tomcat动静分离,负载均衡

tomcat是什么&#xff1a;java开发的开源服务器 处理动态页面&#xff0c;静态页面处理能力一般 jvm参数优化 配置添加 在119行之前 以2cpu 4G内存为例 JAVA_OPTS"$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads2 -XX:PermSize1024m -XX:MaxP…

IS230TCISH6C集成电路分类有哪些呢

​ IS230TCISH6C集成电路分类有哪些呢 集成电路分类有哪些 集成电路是一种微型电子器件或部件&#xff0c;集成电路有很多种&#xff0c;那么集成电路分类有哪些呢&#xff0c;下面小编就为大家介绍集成电路的分类。 按功能结构区分 模拟集成电路 数字集成电路 数/模混合集成电…

JavaSE学习进阶day06_04 集合的嵌套和不可变集合

接昨天讲的内容&#xff0c;今天还要继续学习集合。学完今天的内容&#xff0c;集合就告于段落了&#xff0c;坚持&#xff01; 集合的嵌套&#xff08;掌握&#xff01;&#xff09;&#xff1a; 什么是集合的嵌套&#xff1f;为什么要集合的嵌套&#xff1f;为了搞清楚这个…

算法篇——层序遍历大集合(js版)

102.二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 链接&#xff1a;力扣 var levelOrder function(root) {var res [], queue [];if(!root) return res;// 队列…

海斯坦普Gestamp EDI 需求分析

海斯坦普Gestamp&#xff08;以下简称&#xff1a;Gestamp&#xff09;是一家总部位于西班牙的全球性汽车零部件制造商&#xff0c;目前在全球23个国家拥有超过100家工厂。Gestamp的业务涵盖了车身、底盘和机电系统等多个领域&#xff0c;其产品范围包括钣金、车身结构件、车轮…

非极大值抑制详细原理(NMS含代码及详细注释)

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect 个…

配置vscode arcpy环境 基于ArcGIS的python

最近可能要用到arcpy&#xff0c;我以前这是知道有这个东西&#xff0c;但是没用过&#xff0c;今天正好记录下利用vsCode编译器&#xff0c;python开发来配置arcpy环境。 1.安装ArcGIS desktop 2.下载安装vscode 上面的两步没啥可说的&#xff0c;很简单&#xff0c;我要说…

ArcGIS、ENVI、InVEST、FRAGSTATS多技术融合提升环境、生态、水文、土地、土壤、农业、大气领域应用

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平 点击查看原文 一、空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 …

性能优化之-更高效的数据渲染

前言&#xff1a;中心思想还是让请求的资源得到更快响应的方法&#xff0c;比如压缩资源&#xff0c;减少数据量的大小&#xff0c;缓存数据以减少请求数量&#xff0c;http/2让网络传输变得更快这些&#xff0c;下面就让我们来看看浏览器是如何解析这些数据&#xff0c;最终又…

数据结构——红黑树

红黑树 概念与性质树节点的定义插入红黑树的验证红黑树与AVL树的对比 概念与性质 概念&#xff1a; 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色…

数字IC设计——功耗分析

一、概述 芯片的整体功耗很难通过简单的电流&#xff0c;电压或者电阻值的的相乘来计算。其原因在于&#xff0c;由于芯片作为具有复杂功能的器件&#xff0c;其功耗会根据其不同时段的不同行为&#xff0c;不同的外部条件而发生很大的变化。 1.1 功耗的分类 数字IC芯片的功…

Three.js+TypeScript+Webpack学习记录(二)

使用环境参考 Node.js v16.19.1 正文 跟着文档画个线 看看 Three 的官方文档&#xff0c;起步 -> 画线 -> 没了&#xff1f;&#xff01;&#xff01; 不管怎么说&#xff0c;先画个线吧。 import * as THREE from threeconst scene new THREE.Scene() const camer…