首页 > 编程语言 >python中__getattr__和__setattr__

python中__getattr__和__setattr__

时间:2024-06-20 11:56:04浏览次数:13  
标签:__ obj name python 代码 getattr dict

代码:

点击查看代码
#!/usr/bin/env python
#! -*- coding:utf-8 -*-
 
 
class A(object):
 
    def __setattr__(self, key, value):
        self.__dict__[key] = value
 
    def __getattr__(self, name):
        return "xxx"
 
obj = A()
执行操作的代码:

代码1:
print(obj.__dict__)
结果:
{} # 空字典
代码2:
print(obj.name)
结果:
xxx
代码3:

点击查看代码
obj.name = 'BBB'
print(obj.__dict__)
print(obj.name)
print(obj.xxx)
结果:
点击查看代码
{'name': 'BBB'}
BBB
xxx

总结:

1、当我们第一次获取obj.__dict__的结果是为空的字典。

2、当我们获取对象的某个属性的时候,会先在整个类中找,如过没有则去__getattr__方法里面找,并返回__getattr__中的属性。

3、当我们操作代码obj.name=’BBB’后,此时在类中会自动调用__setattr__方法;所以此时我们再打印obj.__dict__的时候结果会出现我们设置的属性名和属性对应的值组成的字典。

标签:__,obj,name,python,代码,getattr,dict
From: https://www.cnblogs.com/SunshineWeather/p/18258373

相关文章

  • c++提供的类型转换
    在C++中,提供了几种不同的类型转换方式,每种转换方式有其特定的使用场景和语义。以下是C++中常见的几种类型转换方式:静态转换(StaticCast):使用static_cast进行转换,用于基本类型之间的转换,如数值类型的转换、非const对象指针的转换等。静态转换在编译时进行,不提供运行时的检......
  • 易基因:MeRIP-seq等揭示RNA m6A去甲基化酶调控植物雄性不育的分子机制 | 科研速递
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。水稻是全球重要的农作物,也是单子叶植物模型。在水稻中,N6-甲基腺苷(m6A)mRNA修饰对植物的发育和胁迫响应至关重要。OsFIP37作为m6A甲基化复合体的核心组分,其缺乏会导致雄性不育,强调了m6A在雄性生育中的重要性。m6A是......
  • java的serializable接口
    简介Java的Serializable接口是一个用于对象序列化的标记接口。序列化是指将对象的状态转换为字节流的过程,这样对象可以被保存到文件中、通过网络传输或在不同的JVM之间传递。反序列化则是指将字节流恢复为对象的过程。Serializable接口的作用Serializable接口本身没有任......
  • 硬件开发笔记(二十):AD21导入外部下载的元器件原理图库、封装库和3D模型
    前言  在硬件设计的过程中,会遇到一些元器件,这些元器件在本地已有的库里面没有,但是可以从外部下载或者获取到对应的。  本篇就是引入TPS54331D电源芯片作为示例,详细描述整个过程。 创建TPS54331D步骤一:下载TPS54331D模型  云汉芯城  注意:无需注册登录,搜索到......
  • 一、浅谈自动化测试基础
    1.数据驱动思想:实现数据与脚本代码的分离操作,将数据存储在指定的数据格式文件或数据库中,如Excel、Json、Yaml、Mysql等。2.关键字驱动思想:基于数据驱动思想实现进一步的封装,以行为动作驱动业务。将每一步操作封装在单独的类、单独的函数中,一个函数或者一个类中的方法......
  • Python中__delattr__()函数详解
    在Python中,__delattr__是一个特殊方法(也称为魔术方法或双下划线方法),它在尝试删除对象的属性时被调用。当你使用del语句来删除一个对象的属性时,Python会自动调用这个方法来执行删除操作。__delattr__方法接受一个参数,即要删除的属性的名称(通常是一个字符串)。你可以在这个方法中自......
  • 聊一聊 Monitor.Wait 和 Pluse 的底层玩法
    一:背景1.讲故事在dump分析的过程中经常会看到很多线程卡在Monitor.Wait方法上,曾经也有不少人问我为什么用!syncblk看不到Monitor.Wait上的锁信息,刚好昨天有时间我就来研究一下。二:Monitor.Wait底层怎么玩的1.案例演示为了方便讲述,先上一段演示代码,Worker1在执行的过......
  • Sql注入基础
    1.Sql注入基础1.1SQL注入的发生1.2如何获取数据库信息show命令select+函数系统库1.3参数会如何处理?1.4Sql注入的完整流程判断是否可以注入获得数据库名获得表名获取列名获得数据2.SQL注入自动化工具2.1sqlmap2.2sqlmap参数详解sqlmap-......
  • 事后诸葛亮会议
    项目总结:关爱老人项目项目背景与目标关爱老人项目旨在通过技术手段提升老年人的生活质量和幸福感。项目主要包括运动管理、点菜管理和用户管理三个模块,帮助老年人在日常生活中更好地管理健康和饮食。项目实施过程项目分为Alpha阶段和Beta阶段,团队在这两个阶段中不断改进和......
  • [笔记]Splay树
    前置知识:树的左旋、右旋。Splay树是一种平衡树。能够做到每个操作均摊\(O(\logN)\)。前言与上文AVL树不同之处在于,AVL树在任何操作结束后,都能保证每个节点的左右子树高度相差不超过\(1\)。相应地,每个操作都是严格的\(O(\logN)\)。而Splay树并没有对“平衡”的确切定义,任何结......