2023-简单点-Python中的attr那些事-hasattr,getattr,setattr

attr

  • hasattr
  • getattr
      • 语法
      • 示例
      • 使用场景
  • setattr
      • 语法
      • 工作原理
      • 示例
      • 注意事项

hasattr

假设有一个名为Person的类,具有name和age属性:

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

现在创建一个Person对象,并使用hasattr()函数检查该对象是否具有name和gender属性:

person = Person("Alice", 30)
print(hasattr(person, "name"))  # 输出: True
print(hasattr(person, "gender"))  # 输出: False

在上面的例子中,通过hasattr()函数检查person对象是否具有属性name和gender,并分别返回True和False。因为Person类只定义了name和age属性,所以检查gender属性返回False。

注意:属性名称必须是字符串类型的,如果使用标识符(未加引号的名称),则Python会将其解释为变量,并引发错误。

getattr

getattr 是 Python 的一个内置函数,用于获取对象的属性值。如果指定的属性存在,则返回其值;否则,可以指定一个默认值返回,或者触发 AttributeError 异常。

语法

getattr(object, attribute_name[, default])
  • object: 需要获取属性的对象。
  • attribute_name: 字符串,指定需要获取的属性名。
  • default (可选): 如果指定的属性不存在,则返回此默认值。如果不提供此参数并且属性不存在,将触发 AttributeError

示例

class Person:def __init__(self, name, age):self.name = nameself.age = age# 创建一个 Person 对象
person = Person("Alice", 30)# 使用 getattr 获取属性
name = getattr(person, "name")
age = getattr(person, "age")
print(name, age)  # 输出: Alice 30# 尝试获取不存在的属性,触发 AttributeError
try:non_existent = getattr(person, "non_existent")
except AttributeError as e:print(f"Caught an AttributeError: {e}")  # 输出: Caught an AttributeError: 'Person' object has no attribute 'non_existent'# 使用默认值
non_existent_with_default = getattr(person, "non_existent", "Default Value")
print(non_existent_with_default)  # 输出: Default Value

使用场景

getattr 在很多场景下都很有用,尤其是当你不确定对象是否具有某个属性时。它可以让你更安全地访问属性,而不用担心触发 AttributeError。此外,它还可以用于动态地访问属性,即属性名是在运行时确定的。

setattr

setattr()是Python中的一个内置函数,用于设置对象的属性值。该函数接受三个参数:对象、属性名称和属性值。它的作用是将指定的属性值赋给对象的指定属性。

语法

setattr(object, attribute_name, value)
  • object: 需要设置属性的对象。
  • attribute_name: 字符串,指定需要设置的属性名。
  • value: 需要赋给属性的值。

工作原理

setattr()函数的工作原理是通过将属性值赋给对象的属性来实现对属性的设置。在Python中,对象的属性是通过在对象上调用一个名为__setattr__的特殊方法来实现的。setattr()函数内部调用了这个特殊方法来完成属性的设置操作。

示例

class Person:def __init__(self, name, age):self.name = nameself.age = age# 创建一个 Person 对象
person = Person("Alice", 30)
print(person.name)  # 输出: Alice
print(person.age)  # 输出: 30# 使用 setattr 设置属性值
setattr(person, "name", "Bob")
setattr(person, "age", 35)
print(person.name)  # 输出: Bob
print(person.age)  # 输出: 35

在上面的示例中,我们首先创建了一个Person对象,然后使用setattr()函数来设置对象的属性值。通过调用setattr(person, “name”, “Bob”),将person对象的name属性设置为"Bob",类似地,通过调用setattr(person, “age”, 35),将age属性设置为35。最后,我们打印出设置后的属性值,验证了setattr()函数的效果。

注意事项

需要注意的是,setattr()函数可以直接设置对象的属性,包括已有的属性和不存在的属性。如果设置的属性名不存在于对象中,setattr()函数将会动态地创建该属性并将指定的值赋给它。这意味着可以通过setattr()函数来动态地添加新的属性到对象中。

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

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

相关文章

Avalonia中使用Prism实现区域导航功能

前言 上一篇文章我们讲了在Avalonia开发中,引入Prism框架来完成项目的MVVM迁移。本章内容将带领大家学习如何在Avalonia中使用Prism框架实现区域导航功能。如果你还不知道Avalonia中如何引入Prism框架,请看我上一篇文章:Avalonia框架下面使用…

Java静态变量和实例变量区别——面试

主要从以下几个方面来解释: 1.定义不同: 静态变量被static关键字修饰, 实例变量前则不加; 2.初始化不同: 静态变量在类加…

跨文化合作指南:与海外网红沟通的不可忽视的文化差异

随着社交媒体的飞速发展,海外网红在全球范围内崭露头角,成为品牌推广和文化传播的重要力量。然而,由于不同国家和地区存在着独特的文化差异,与海外网红进行沟通合作时,我们必须认真对待文化差异,以确保合作…

HarmonyOS学习--TypeScript语言学习(三)

本章目录如下 一、条件语句 二、迭代器 三、循环 四、函数 五、类 一、条件语句 条件语句用于基于不同的条件来执行不同的动作。TypeScript 条件语句是通过一条或多条语句的执行结果(True 或 False)来决定执行的代码块。 在 TypeScript 中&#x…

Python-赋值运算符(详解)

表示赋值 左侧为变量,右边为值 a b 10#先把10赋值给b,再把b赋值给a 相当于a 10 b 10 链式赋值,但是不推荐,一般一行一个语句,提高可读性,良好的代码风格 多元赋值: a , b 10,20 #python语…

Word使用相关——(待完善)

1.word 怎样删除分节符 2.word 怎样删除目录中的分节符 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我…

时序数据库TDengine安装及c#连接读写数据

物联网数据采集,需写入大量数据,这时就用到时序数据库来存储和快速读取 我个人使用感觉国产的开源项目TDengine,比InfluxDB操作方便很多,容易上手,支持使用SqlSugar进行数据操作,跟操作mysql数据库一样的体…

使用Selenium模拟人工操作及获取网页内容

使用Selenium抓取网页动态内容 根据权威机构发布的全球互联网可访问性审计报告,全球约有四分之三的网站其内容或部分内容是通过JavaScript动态生成的,这就意味着在浏览器窗口中“查看网页源代码”时无法在HTML代码中找到这些内容,也就是说我们…

Ps:文字操作常用快捷键

对文字的设置操作,可在工具选项栏或“字符”面板上进行。但是,如果能记住并使用快捷键,可大大提高工作效率。 设置文字颜色 Color 1、选中几个或全部文字后,除了使用工具选项栏上的“颜色”按钮,还可以使用快捷键 Alt…

Java IO流:基本概念

一、IO 概念 ・I/O 即输入 Input/ 输出 Output 的缩写,其实就是计算机调度把各个存储中(包括内存和外部存储)的数据写入写出的过程; ・java 中用 “流(stream)” 来抽象表示这么一个写入写出的功能&#…

吴恩达《机器学习》11-3-11-5:类偏斜的误差度量、查准率和查全率之间的权衡、机器学习的数据

一、类偏斜的误差度量 误差度量的关键性 之前的课程中已经提到了误差分析和设定误差度量值的重要性。评估学习算法并衡量其表现需要使用一个实数,这就是误差度量值。然而,在某些情况下,特别是当处理偏斜类时,选择正确的误差度量…

idea安装

1、下载插件 下载地址:https://plugins.zhile.io/files/ide-eval-resetter-2.1.6.zip 2、安装插件 直接下载插件 zip 包(macOS 可能会自动解压,然后把 zip 包丢进回收站) 通常可以直接把 zip 包拖进 IDE 的窗口来进行插件的安装…

如何使用Python核对文件夹内的文件

说明:日常工作中,我们经常会遇到这样的场景:核对A、B文件夹中文件的差异,找出A、B文件夹中不同部分的文件; 本文介绍如何使用Python来实现; 第一步:获取文件清单 首先,我们要获取…

Navicat 与 华为云 GaussDB 合作再升级,赋能 GaussDB 分布式数据库

2023 年第三季度,Navicat 首次支持了华为云 GaussDB 主备版数据库。经过双方团队进一步的深化合作,Navicat 完成了 GaussDB 分布式的研发适配工作,赋能 GaussDB 全域数据库产品。 GaussDB 数据库分为主备版和分布式版两种模式。主备版适用于…

软件即服务:改变传统软件交付模式的革命性商业模式

Software as a Service (SaaS)是一种流行的商业模式,它允许软件开发商通过互联网向用户提供软件服务,用户无需购买和维护软件本身。这种模式具有许多优势,包括降低成本、提高效率、增强安全性等。本文将探讨SaaS商业模式的概念、优势、应用和…

Spingboot 之spring-boot-starter-parent与spring-boot-dependencies区分

在创建spring boot工程时,spring-boot-starter-parent 和 spring-boot-dependencies是二选一的关系,在pom中引入其中一个就可以了。 那么什么时候用spring-boot-starter-parent 和 spring-boot-dependencies呢?从字面名称上看,如…

履带吊,笔记

0.前言 履带吊使用了与传统的门桥式起重机不同的技术路线。因为它是移动式设备,所以它的动力是燃油发动机。为了精确调控升降。它的整套动力系统似乎采用了某种液压传动系统。履带吊国内也有生产商。但是下文中,还是从国外的一款产品说起。这款产品的pd…

JDK7与JDK8中HashMap的区别

学习了HashMap JDK7和JDK8中的实现,现在让我们来总结下两者的区别. JDK7 HashMap // 数据结构 - 基于数组链表。 - 元素存储在 Entry 对象中,使用链表解决哈希冲突 // 扩容条件: - 在数组长度达到阈值且当前位置不为空时触发扩容。 // 扩容…

【无标题】Vue3想在scss中想使用动态的变量

Vue3想在css中想使用动态的变量 首先在组件中定义 :style"{ --custom-style-color: customStyle.color }",customStyle.color就是那个传过来的变量,也可以是自定义的-color 值 const props defineProps({customStyle: {type: Object,default: () >…

java面试题-Dubbo和openFeign怎么选择,优劣

远离八股文,面试大白话,通俗且易懂 看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。 java面试题汇总-目录-持续更新中 面试官:你在…