python列出多重继承类的每个对象属性

1 python列出多重继承类的每个对象属性

1.1 列出实例属性

python通过__dict__列出实例属性。

(1) 实例.__class__:获取实例所属类。

(2) 类.__name__:获取类的名称。

(3) 实例.__class__.__name__:获取实例的类的名称。

(4) 实例.__dict__:获取实例的属性字典。

(5) id(实例):获取实例的内存地址。

(6) __attrnames:伪私有属性,自动扩展为_ListInstance__attrnames。

(7) __str__:重载__str__,使用print时自动调用__str__。

示例

lister.py

class ListInstance:def __str__(self):return '<Instance of {},address {}:\n{}>'.format(self.__class__.__name__,id(self),self.__attrnames())def __attrnames(self):result=''for attr in sorted(self.__dict__):result+='\tname {}={}\n'.format(attr,self.__dict__[attr])return result

单继承print调用__str__

>>> import os
>>> os.chdir(r'E:\documents\F盘')
>>> from lister import ListInstance
>>> class PubAcct(ListInstance):def __init__(self):self.name='梯阅线条'
>>> pa=PubAcct()
>>> print(pa)
<Instance of PubAcct,address 61570576:name name=梯阅线条
>
>>> pa
<__main__.PubAcct object at 0x03AB7E10>
>>> str(pa)
'<Instance of PubAcct,address 61570576:\n\tname name=梯阅线条\n>'

testmulclass.py

from lister import *
class BaseC1:def __init__(self):self.title1='梯阅线条'def m1(self):passclass SubC1(BaseC1,ListInstance):def __init__(self):super().__init__()self.title2='tyxt.work'self.title3='软件测试开发'def m2(self):passif __name__=='__main__':sc1=SubC1()print(sc1)

多继承print调用__str__

>>> import os
>>> os.chdir(r'E:\documents\F盘')
>>> from testmulclass import *
>>> sc1=SubC1()
>>> print(sc1)
<Instance of SubC1,address 60595344:name title1=梯阅线条name title2=tyxt.workname title3=软件测试开发
>

1.2 列出继承属性

python通过dir(实例)列出实例及其基类的属性。

(1) attr[:2]和attr[-2:]去掉内置属性:双下化下开头和结尾的属性。

(2) getattr(实例,属性名):获取实例属性,包括继承属性。

示例

lister.py

class ListInherited:def __str__(self):return '<Instance of {},address {}:\n{}>'.format(self.__class__.__name__,id(self),self.__attrnames())def __attrnames(self):result=''for attr in dir(self):if attr[:2]=='__' and attr[-2:]=='__':result+='\tname {}=<>\n'.format(attr)else:result+='\tname {}={}\n'.format(attr,getattr(self,attr))return result

testmulclass.py

from lister import *
class BaseC1:def __init__(self):self.title1='梯阅线条'def m1(self):passclass SubC1(BaseC1,ListInstance):def __init__(self):super().__init__()self.title2='tyxt.work'self.title3='软件测试开发'def m2(self):passclass SubC2(BaseC1,ListInherited):def __init__(self):super().__init__()self.title2='tyxt.work'self.title3='软件测试开发'def m2(self):passif __name__=='__main__':sc1=SubC1()print(sc1)sc2=SubC2()print(sc2)

多继承print调用__str__

>>> import os
>>> os.chdir(r'E:\documents\F盘')
>>> sc2=SubC2()
Traceback (most recent call last):File "<pyshell#2>", line 1, in <module>sc2=SubC2()
NameError: name 'SubC2' is not defined
>>> from testmulclass import *
>>> sc2=SubC2()
>>> print(sc2)
<Instance of SubC2,address 57252176:name _ListInherited__attrnames=<bound method ListInherited.__attrnames of <testmulclass.SubC2 object at 0x03699950>>name __class__=<>name __delattr__=<>......name __subclasshook__=<>name __weakref__=<>name m1=<bound method BaseC1.m1 of <testmulclass.SubC2 object at 0x03699950>>name m2=<bound method SubC2.m2 of <testmulclass.SubC2 object at 0x03699950>>name title1=梯阅线条name title2=tyxt.workname title3=软件测试开发
>

1.3 列出每个对象的属性

python通过实例.__class__获取所属类,通过类.__bases__获取全部基类,通过实例.__dict__获取属性,从而获取每个对象的属性。

示例

lister.py

class ListTree:def __str__(self):self.__visited={}return '<Instance of {0},address {1}:\n{2}{3}>'.format(self.__class__.__name__,id(self),self.__attrnames(self,0),self.__listclass(self.__class__,4))def __listclass(self,aClass,indent):dots='.'*indentif aClass in self.__visited:return '\n{0}<Class {1}:,address {2}:(see above)>\n'.format(dots,aClass.__name__,id(aClass))else:self.__visited[aClass]=Truegenabove=(self.__listclass(c,indent+4) for c in aClass.__bases__)return '\n{0}<Class {1},address {2}:\n{3}{4}{5}>\n'.format(dots,aClass.__name__,id(aClass),self.__attrnames(aClass,indent),''.join(genabove),dots)def __attrnames(self,obj,indent):spaces=' '*(indent+4)result=''for attr in sorted(obj.__dict__):if attr.startswith('__') and attr.endswith('__'):result+=spaces+'{0}=<>\n'.format(attr)else:result+=spaces+'{0}={1}\n'.format(attr,getattr(obj,attr))return result

testmulclass.py

class SubC3(BaseC1,ListTree):def __init__(self):super().__init__()self.title2='tyxt.work'self.title3='软件测试开发'def m2(self):pass 

多继承列出每个对象的属性

>>> import os
>>> os.chdir(r'E:\documents\F盘')
>>> from testmulclass import *
>>> sc3=SubC3()
>>> print(sc3)
<Instance of SubC3,address 57711792:_ListTree__visited={}title1=梯阅线条title2=tyxt.worktitle3=软件测试开发....<Class SubC3,address 57923944:__doc__=<>__init__=<>__module__=<>m2=<function SubC3.m2 at 0x0371B660>........<Class BaseC1,address 57922528:__dict__=<>__doc__=<>__init__=<>__module__=<>__weakref__=<>m1=<function BaseC1.m1 at 0x0371B4B0>............<Class object,address 1813587016:__class__=<>__delattr__=<>__dir__=<>__doc__=<>__eq__=<>__format__=<>__ge__=<>__getattribute__=<>__gt__=<>__hash__=<>__init__=<>__init_subclass__=<>__le__=<>__lt__=<>__ne__=<>__new__=<>__reduce__=<>__reduce_ex__=<>__repr__=<>__setattr__=<>__sizeof__=<>__str__=<>__subclasshook__=<>
............>
........>........<Class ListTree,address 57922056:_ListTree__attrnames=<function ListTree.__attrnames at 0x0371B468>_ListTree__listclass=<function ListTree.__listclass at 0x0371B420>__dict__=<>__doc__=<>__module__=<>__str__=<>__weakref__=<>............<Class object:,address 1813587016:(see above)>
........>
....>
>

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

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

相关文章

js进阶笔记之Promise

目录 为什么用Promise Promise的基本语法 Promise的then方法 then的链式调用 Promise的相关方法 为什么用Promise JS代码分为同步代码和异步代码 同步: 代码依次执行&#xff0c;上一个任务完成后&#xff0c;下一个任务才执行 异步 遇到耗时任务不必等待其完成&#xf…

Java项目调用C/C++ SDK的方案汇总

Java项目调用C/C SDK的方案汇总 背景调研JNIJNativeJNAJavaCPP 背景 Java项目中需要调用到一个C项目&#xff0c;于是对目前通用的解决方案做了一些调研&#xff0c;这里做一个汇总。 调研 JNI JNI&#xff1a;Java Native Interface&#xff0c;JNI是一套编程接口&#xf…

基于社区电商的Redis缓存架构-库存模块缓存架构(下)

基于缓存分片的下单库存扣减方案 将商品进行数据分片&#xff0c;并将分片分散存储在各个 Redis 节点中&#xff0c;那么如何计算每次操作商品的库存是去操作哪一个 Redis 节点呢&#xff1f; 我们对商品库存进行了分片存储&#xff0c;那么当扣减库存的时候&#xff0c;操作…

《代码整洁之道》摘抄

《代码整洁之道&#xff1a;程序员的职业素养》摘抄 1 专业主义&#xff08;开发人员应该怎么保证代码质量&#xff09; 专业人士&#xff0c;就是能对自己犯下的错误负责的人&#xff0c;哪怕那些错误实际上在所难免。所以&#xff0c;雄心勃勃的专业人士们&#xff0c;你们…

PyEcharts快速上手_Python数据分析与可视化

PyEcharts快速上手 导入图表类型添加数据设置图表样式输出图表链式调用 导入图表类型 和其他库的导入方法一样&#xff0c;在绘图之前首先要在文件开头导入所需图表类型。 from pyecharts.charts import BarBar 类型是柱状图/条形图在 pyEcharts 中的英文名。 pyEcharts 中有…

vr工业制造流程3D模拟仿真可视化展示

工业仿真3D数字化展示系统具有多方面的独特之处&#xff0c;主要体现在以下几个方面&#xff1a; 1、真实感和交互性&#xff1a;该系统可以将实际的工业设备、产品、场景等进行数字化建模&#xff0c;通过三维图形技术将其呈现在计算机屏幕上&#xff0c;使用户可以在虚拟环境…

Python中的并发编程

目录 一、引言 二、Python中的线程 1、线程的概念 2、创建线程 3、线程同步和锁 4、线程池 三、Python中的进程 1、进程的概念 2、创建进程 四、Python中的异步IO 1、异步IO的概念 2、异步IO的实现 3、异步IO的并发执行 五、总结 一、引言 并发编程是一种计算机…

【漏洞复现】智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC

漏洞描述 智跃人力资源管理系统是基于B/S网页端广域网平台,一套考勤系统即可对全国各地多个分公司进行统一管控,成本更低。信息共享更快。跨平台,跨电子设备。智跃人力资源管理系统GenerateEntityFromTable.aspx接口处存在SQL注入漏洞,攻击者可通过该漏洞获取数据库中的信…

100W用户、8000W流量在线贺卡应用架构如何优化?

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

数据管理系统-week10-自由访问控制

文章目录 前言一、用户管理用户管理语句介绍二、数据库管理三、特权(重点考点)Administrative (global) privileges数据库特权表权限列权限四、角色参考文献前言 这节课主要讲了用户管理数据库的具体语句,数据库特权当中的全局特权,数据库特权,表特权与列特权的使用与注意…

GOLAND搭建GIN框架以及基础框架搭建

创建GO环境文件夹 终端输入安装GIN go get -u github.com/gin-gonic/gin如果遇到超时错误 package golang.org/x/net/html: unrecognized import path "golang.org/x/net/html": https fetch: Get "https://golang.org/x/net/html?go-get1": dial tcp …

KubeShark: Kubernetes的Wireshark

Wireshark可以帮助我们抓取并分析网络数据包&#xff0c;理解网络中发生的事情&#xff0c;那是否有工具可以帮助我们理解在K8S集群中发生的事情&#xff0c;帮助排查集群故障&#xff0c;Kubeshark就是这样的工具。原文: KubeShark: Wireshark for Kubernetes[1] 简介 Wiresha…

【动态代理详解】

动态代理 知道什么是动态代理以及动态代理能干什么就可以 代理的概述 什么是动态代理 ​ 使用jdk的反射机制&#xff0c;创建对象的能力&#xff0c; 创建的是代理类的对象。 动态&#xff1a;在程序执行时&#xff0c;调用jdk提供的方法才能创建代理类的对象。jdk动态代理&…

GnuCash macos 设置中文的方法

一、环境&#xff1a; macos 13.6.1 gnucash 5.4-2 二、查看系统默认语言&#xff1a; defaults read -g AppleLocale 三、设置gnucash应用语言&#xff1a; defaults write $(mdls -name kMDItemCFBundleIdentifier -raw /Applications/GnuCash.app) AppleLanguages "…

【Oracle】数据库登陆错误:ORA-28000:the account is locked解决方法

问题描述 在连接Oracle数据库的时候出现了ORA-28000:the account is locked报错&#xff0c;登录账号被锁定&#xff0c;出现这种情况就需要将被锁定用户解锁。 解决方法 解锁方法就是通过用system账号登录数据库&#xff0c;然后修改被锁定账户状态&#xff0c;具体如下图所示…

LINQ-123 题外篇之IEnumerable和IQueryable

这两天又学习了2篇&#xff0c;记录下&#xff1a; IEnumerable and IQueryable in C# - Dot Net Tutorials Differences Between IEnumerable and IQueryable in C# - Dot Net Tutorials 实现接口IEnumerable和IQueryable是使用LINQ查询的必要条件。 关于 IEnumerable<…

51爱心流水灯32灯炫酷代码

源代码摘自远眺883的文章&#xff0c;大佬是30个灯的&#xff0c;感兴趣的铁汁们可以去看看哦~&#xff08;已取得原作者的许可&#xff09;&#xff1a;基于STC89C51单片机设计的心形流水灯软件代码部分_单片机流水灯代码_远眺883的博客-CSDN博客 由于博主是个小菜鸡&#xff…

SSM+VUE的增删改查

目录 后端代码 mapper.xml controller 前端代码 api》action.js 后端代码 mapper.xml <!--模糊查询--><select id"selectLike" parameterType"com.zking.spboot.model.Book" resultMap"BaseResultMap">select * from t_book&l…

selenium+python

selenium 八大查找元素 from selenium import webdriver from selenium.webdriver.common.by import By# 创建一个 WebDriver 实例 driver webdriver.Chrome()# 打开网页 driver.get("https://www.baidu.com/")# 使用 find_element 方法查找元素 element driver.…

springboot 整合 Spring Security 上篇

1.创建springBoot 项目工程(spring6.0的底层、JDK17) 1.添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>配置完成启动访问controller会出现登录…