首页 > 编程语言 >Python使用__dict__查看对象内部属性的名称和值

Python使用__dict__查看对象内部属性的名称和值

时间:2024-01-18 16:58:45浏览次数:29  
标签:__ .__ name Python mo dict age

1、定义一个类

class MyObj:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def myFunc(self):
        pass


mo = MyObj('Boby', 24)
print(mo)
print(mo.__dict__)

#结果
<__main__.MyObj object at 0x000000815C364518>

{'name': 'Boby', 'age': 24}

从以上代码来看;直接使用mo.__dict__即可获取该实例的属性值;

2、还可以设置属性

还是上面的类;

mo = MyObj('Boby', 24)

# 修改属性
mo.__dict__['name'] = 'jason'
mo.__dict__['age'] = 42
print(mo.__dict__)


#结果
{'name': 'jason', 'age': 42}

3、添加属性

mo = MyObj('Boby', 24)

mo.__dict__['name'] = 'jason'
mo.__dict__['age'] = 42

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
#添加属性
mo.__dict__['grade'] = 3
mo.__dict__['address'] = 'BeiJing'
print(mo.__dict__)


#结果
{'name': 'jason', 'age': 42, 'grade': 3, 'address': 'BeiJing'}

4、总结

我们知道,C、Java等面向对象的编程语言,在进行类的初始化时,对与类的限制是很严格的,这样做的好处是安全,我们试想一下,如果创建的一个类在任何情况下,会被任何外部或者内部方法调用,并且可以轻易改动它,这样的做法是很危险的。

比如上面的mo实例,我们执行下面的代码:

mo.__dict__.clear()

print(mo.__dict__)

我们创建的实例成了空白;

因此,尽量不要使用obj.__dict__这个对象来设置键值对或者要小心使用;

标签:__,.__,name,Python,mo,dict,age
From: https://www.cnblogs.com/Pythonmiss/p/17972847

相关文章

  • vue+antd-vue(自定义iconfont图标组件)
    1.方式一代码如下import{createFromIconfontCN}from'@ant-design/icons-vue';constIconFont=createFromIconfontCN({scriptUrl:newURL('./assets/font/iconfont.js',import.meta.url).href});app.component('IconFont',IconFont);......
  • WPF与WinForm的对比
    WPF与WinForm的对比创建新项目在vs2022中,这两者分别叫做WPF应用和Windows窗体应用。渲染引擎和设计WPF使用DirectX作为渲染引擎,支持更复杂和动态的UI,包括2D和3D图形、动画和丰富的样式和模板。WinForms使用GDI+作为渲染引擎,主要支持传统的2D图形。它的界面元素(控件)更简单,功能......
  • PostgreSQL安装部署
    1.使用yum安装1)安装数据库服务器yuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpmyuminstall-ypostgresql15-server2)初始化并启动数据库/usr/pgsql-15/bin/postgresql-15-setupinitdb#默认......
  • 记录--Object.assign 这算是深拷贝吗
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助在JavaScript中,Object.assign()是一个用于合并对象属性的常见方法。然而,对于许多开发者来说,关于它是否执行深拷贝的认识可能存在一些混淆。先说答案Object.assign()不属于深拷贝,我们接着往下看。Object.assign(......
  • 为文件一键命名为其md5值
    为文件一键命名为其md5值不知道怎么给文件命名?一键命名为其md5不就是了!单文件拖拽版无需启动,直接将文件拖拽到.bat文件上@echooffsetlocalenabledelayedexpansion::获取文件完整路径set"file_path=%~1"::检查文件是否存在ifnotexist"!file_path!"(echoF......
  • 图书管理员是做什么的,工作内容有哪些
    图书管理员是做什么的,工作内容有哪些 图书管理员是负责管理图书馆的日常工作,包括图书的收集、分类、借阅、归还以及图书馆的运营和管理。图书管理员的主要工作内容包括:1.图书采购和编目:图书管理员需要负责购买和接收新书,并对其进行编目,以便其他图书馆员能够快速地......
  • BOSHIDA 探索直流电源模块的应用领域
    BOSHIDA探索直流电源模块的应用领域直流电源模块广泛应用于许多领域,包括电子设备、通信、工业自动化、航空航天等。以下是一些常见的应用领域: 1.电子设备:直流电源模块用于给各种电子设备供电,如计算机、手机、平板电脑、摄像机等。2.通信:直流电源模块用于为通信设备供电,如......
  • js.dom2
    复选框:input.checked=false;onload事件会在页面或图像加载完成后立即发生。<bodyonload="init()">functioninit(){setTimeout("showAD()",2000);}functioninit(){setInterval("changImg()",1);}正则表达式:用字符串来规定字符串的格式......
  • RTSP流截图并剔除花屏图片
    大致代码如下:importcv2importnumpyasnpfromfastapiimportHTTPExceptionRgbRangeType=tuple[tuple[int,int,int],tuple[int,int,int]]classValidationError(HTTPException):def__init__(self,detail:str,status_code=400)->None:supe......
  • GB28181智慧安防视频监控EasyCVR v3.5系统增加录像保存地址的配置
    智慧安防监控EasyCVR视频管理平台能在复杂的网络环境中,将前端设备统一集中接入。在网络传输上,平台支持设备通过4G、5G、WIFI、有线等方式进行视频流的快捷传输,视频流经平台处理后可对外进行多格式的分发,实现多展示终端观看(电脑、大屏、电视墙、手机端等)。国标GB28181协议EasyCVR安......