【Python】对象属性操作详细指南✨

在这里插入图片描述

Python 对象属性操作详细指南✨

前言

Python 的世界里,理解和操作对象的属性是一项基础且重要的技能。掌握如何使用 Python 的内置函数来操作对象属性将大大提高编程效率。本文旨在提供一个全面的指南,介绍如何使用 Python 中的几个关键内置函数来处理对象的属性,包括获取、设置、删除和检查属性的存在。让我们一起深入了解这些强大的工具吧!

知识点📖📖

涉及到属性操作的内置函数时,我总结了以下几个函数,它们的名称和作用如下:

  • 它们在 Python 中用于操作对象的属性和方法时有用。
函数名称作用
delattr(object, name)删除对象的指定属性。
getattr(object, name[, default])获取对象的属性值,如果属性不存在则返回默认值(可选)。
hasattr(object, name)检查对象是否具有指定的属性或方法,返回布尔值。
setattr(object, name, value)设置对象的属性值,如果属性不存在则创建它。
vars([object])返回对象的属性字典,或者当前作用域的命名空间。
dir([object])返回对象的属性和方法列表,或者当前作用域的名称列表。

对象类型📚

对象类型描述
类实例用于访问类实例的属性和方法。可以访问公共属性、私有属性和实例方法。
用于访问类本身的属性和方法。包括静态方法、类方法以及普通方法(需要类实例化后才能使用)。
模块用于访问模块中定义的函数、类和变量。
内置类型实例用于访问如列表、字典、字符串等内置类型实例的方法。例如,访问列表的 append 方法或字符串的 split 方法。
自定义对象用于访问任何具有属性或方法的自定义对象。这些对象可以是用户自定义的类实例。

代码实现💻

delattr🗑️

delattr 函数用于删除对象的属性。它的基本用法如下:

delattr(object, name)
  • object :要删除属性的对象。
  • name :要删除的属性名称

代码示例:

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


if __name__ == '__main__':
    person = Person("Alice", 30)

    # 使用 delattr 删除对象属性
    print('删除前 ==> ', person.__dict__)
    delattr(person, "name")

    # 删除的不存在的属性将引发 AttributeError 异常
    print('删除后 ==> ', person.__dict__)
    delattr(person, "name")

输出:

删除前 ==>  {'name': 'Alice', 'age': 30}
删除后 ==>  {'age': 30}
Traceback (most recent call last):
  File "F:\csdn\demo.py", line 16, in <module>
    delattr(person, "name")
AttributeError: name

getattr🔍

getattr 函数用于获取对象的属性值。它的基本用法如下:

getattr(object, name, default=None)
  • object :要获取属性的对象。
  • name :要获取的属性名称。
  • default(可选):如果属性不存在,则返回该默认值。

代码示例:

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


if __name__ == '__main__':
    person = Person("Alice", 30)

    # 使用 getattr 获取对象属性值
    name = getattr(person, "name")
    age = getattr(person, "age")
    # 使用默认值, 否则抛出 AttributeError 异常
    city = getattr(person, "city", "Unknown")  

    # 输出属性值
    print("Name:", name)
    print("Age:", age)
    print("City:", city)

输出:

Name: Alice
Age: 30
City: Unknown

hasattr🤔

hasattr 函数用于检查对象是否具有指定的属性或方法。

它的基本用法如下:

hasattr(object, name)
  • object :要检查的对象。
  • name :要检查的属性或方法名称。

代码示例:

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


if __name__ == '__main__':
    person = Person("Bob", 25)

    # 使用 hasattr 检查属性是否存在
    has_name = hasattr(person, "name")
    has_salary = hasattr(person, "salary")

    print("Has name:", has_name)  # True
    print("Has salary:", has_salary)  # False

输出:

Has name: True
Has salary: False

setattr🛠️

setattr 函数用于设置对象的属性值。如果属性不存在,它将创建一个新属性。

它的基本用法如下:

setattr(object, name, value)
  • object :要设置属性的对象。
  • name :要设置的属性名称。
  • value :要设置的属性值。

代码示例:

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


if __name__ == '__main__':
    person = Person("Eve")

    # 使用 setattr 设置新属性
    print('设置前 ==> ', person.__dict__)
    setattr(person, "age", 28)

    # 输出设置的属性
    print('设置后 ==> ', person.__dict__)

输出:

设置前 ==>  {'name': 'Eve'}
设置后 ==>  {'name': 'Eve', 'age': 28}

vars🗂️

vars 函数返回对象的 __dict__ 属性,即对象的属性字典。

如果没有参数,它返回当前作用域的命名空间。

vars([object])
  • object(可选):要返回属性字典的对象。

代码示例:

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


if __name__ == '__main__':
    person = Person("Alice", 30)

    # 使用 vars 获取对象属性字典
    person_vars = vars(person)

    print('Person ==> ', person_vars)
    print('当前作用域 ==> ', vars())

输出:

Person ==>  {'name': 'Alice', 'age': 30}
当前作用域 ==>  {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000022EFC8B7C70>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'F:\\csdn\\demo.py', '__cached__': None, 'Person': <class '__main__.Person'>, 'person': <__main__.Person object at 0x0000022EFC9D5390>, 'person_vars': {'name': 'Alice', 'age': 30}}

dir🔎

dir 函数用于返回对象的属性和方法列表。如果没有参数,它返回当前作用域中的名称列表。

dir([object])
  • object(可选):要列出属性和方法的对象。

代码示例:

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

    def say_hello(self):
        return "Hello!"


if __name__ == '__main__':
    person = Person("Bob")

    # 使用 dir 列出对象的属性和方法
    attributes = dir(person)

    print('attributes ==> ', attributes)
    print('当前作用域 ==> ', dir())

输出:

attributes ==>  ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_hello']

当前作用域 ==>  ['Person', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'attributes', 'person']

总结📘

在本文中,我们详细探讨了 Python 中用于操作对象属性的几个内置函数:getattrsetattrdelattrhasattr、以及辅助函数 varsdir。通过具体的代码示例,我们展示了这些函数在不同对象类型上的应用,从类实例到自定义对象,再到模块和内置类型实例。无论是访问、修改、删除还是检查属性,这些内置函数都是 Python 编程中不可或缺的工具。善于使用它们,有助于提升编程水平。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第14章_集合与数据结构拓展练习(前序、中序、后序遍历,线性结构,单向链表构建,单向链表及其反转,字符串压缩)

文章目录 第14章_集合与数据结构拓展练习选择填空题1、前序、中序、后序遍历2、线性结构3、其它 编程题4、单向链表构建5、单向链表及其反转6、字符串压缩 第14章_集合与数据结构拓展练习 选择填空题 1、前序、中序、后序遍历 分析&#xff1a; 完全二叉树&#xff1a; 叶结点…

一区优化直接写:KOA-CNN-BiLSTM-Attention开普勒优化卷积、长短期记忆网络融合注意力机制的多变量回归预测程序!

适用平台&#xff1a;Matlab 2023版及以上 KOA开普勒优化算法&#xff0c;于2023年5月发表在SCI、中科院1区Top顶级期刊《Knowledge-Based Systems》上。 该算法提出时间很短&#xff0c;目前还没有套用这个算法的文献。 同样的&#xff0c;我们利用该新鲜出炉的算法对我们的…

运维平台介绍:视频智能运维平台的视频质量诊断分析和告警中心

目 录 一、视频智能运维平台介绍 &#xff08;一&#xff09;平台概述 &#xff08;二&#xff09;结构图 &#xff08;三&#xff09;功能介绍 1、运维监控 2、视频诊断 3、巡检管理 4、告警管理 5、资产管理 6、工单管理 7、运维…

jrebel IDEA 热部署

1 下载 2022.4.1 JRebel and XRebel - IntelliJ IDEs Plugin | Marketplace 2 选择下载好的zip 离线安装IDEA 插件 重启IDEA 3 打开 [Preference -> JRebel & XRebel] 菜单&#xff0c;输入 GUID address 为 https://jrebel.qekang.com/1e67ec1b-122f-4708-87d…

Data Bricks Delta Lake 入门

Delta Lake 是一个开源存储层&#xff0c;它将关系数据库语义添加到基于 Spark 的数据湖处理中。 适用于 PySpark、Scala 和 .NET 代码的 Azure Synapse Analytics Spark , Azure DataBricks 都支持 Delta Lake。在大数据这个领域&#xff0c;对象存储的最影响效率的问题就是针…

【C语言】linux内核ipoib模块 - ipoib_start_xmit

一、ipoib_start_xmit函数定义 static netdev_tx_t ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev) {struct ipoib_dev_priv *priv ipoib_priv(dev);struct rdma_netdev *rn netdev_priv(dev);struct ipoib_neigh *neigh;struct ipoib_pseudo_header *phdr…

【保姆级教程|YOLOv8改进】【3】使用FasterBlock替换C2f中的Bottleneck

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

代码、课程、教学的一些思考-2024

1 代码、算法、艺术品 1.1 代码 最典型的C代码示例。 以下是一个简单的C代码示例&#xff0c;它打印出“Hello, World!”&#xff1a; #include <iostream> int main() { std::cout << "Hello, World!"; return 0; } 这段代码定义了一个程序&a…

鲁大师2023年牛角尖颁奖盛典落幕,顶尖产品之间的又一次碰撞

1月18日&#xff0c;鲁大师2023年度牛角尖颁奖典礼在四川省内江市威远县船石湖豪生温泉度假酒店完美落幕。 本届鲁大师牛角尖颁奖盛典举办地选在了威远县可谓是深有其意&#xff0c;其名称的由来最早可追溯到隋朝&#xff0c;取“威名远震”之意。而这也与鲁大师牛角尖奖项的设…

Apache安全及优化

配置第一台虚拟机 VM1网卡 yum仓库 挂载磁盘 上传3个软件包到/目录 到/目录下进行解压缩 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar -xjf httpd-2.4.29.tar.bz2 mv apr-1.6.2 httpd-2.4.29/srclib/apr mv apr-util-1.6…

基于Springboot+vue鲜花商城系统(前后端分离)

该项目完全免费 项目技术栈&#xff1a; 前端&#xff1a;vueelementUIecharts 后端&#xff1a;SpringbootmybatisMySQL 项目主要功能&#xff1a; 商品信息 商品分类 角色管理 公告管理 轮播图管理 订单管理 收货地址管理 日志管理 部分功能截图&#xff1a;

大数据工作岗位分析

前言&#xff1a;随着大数据需求的增多&#xff0c;许多中小公司和团队也新增或扩展了大数据工作岗位&#xff1b;但是却对大数据要做什么和能做什么&#xff0c;没有深入的认识&#xff1b;往往是招了大数据岗位&#xff0c;搭建起基础能力后&#xff0c;就一直处于重复开发和…

【Linux】

Linux零基础入门 列出文件/文件夹新建/切换路径查看当前路径重命名或者移动文件夹拷贝文件/文件夹删除文件夹设置环境变量编辑文本文件压缩和解压查看cpu的信息查看/杀死进程查看进程的CPU和内存占用重定向日志场景一场景二场景三场景四 列出文件/文件夹 命令&#xff1a;Ls(L…

2017年认证杯SPSSPRO杯数学建模A题(第一阶段)安全的后视镜全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 A题 安全的后视镜 原题再现&#xff1a; 汽车后视镜的视野对行车安全非常重要。一般来说&#xff0c;汽车的后视镜需要有良好的视野范围&#xff0c;以便驾驶员能够全面地了解车后方的道路情况。同时&#xff0c;后视镜也要使图像的畸变尽可能…

shopee选品案例分析:如何在Shopee平台上进行选品并取得成功

在Shopee平台上进行选品是卖家们开设店铺的重要步骤之一。通过分析成功案例&#xff0c;卖家们可以获取灵感和策略&#xff0c;从而更好地进行选品。本文将以一个女装店铺为例&#xff0c;介绍如何在Shopee平台上进行选品并取得成功。 先给大家推荐一款shopee知虾数据运营工具…

人工智能之卷积神经网络(CNN)

前言&#xff1a;今天我们重点探讨一下卷积神经网络(CNN)算法。 _ 20世纪60年代&#xff0c;Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性&#xff0c;继而提出了卷积神经网络CNN&#xff08;Convo…

详解IP安全:IPSec协议簇 | AH协议 | ESP协议 | IKE协议_ipsec esp

目录 IP安全概述 IPSec协议簇 IPSec的实现方式 AH&#xff08;Authentication Header&#xff0c;认证头&#xff09; ESP&#xff08;Encapsulating Security Payload&#xff0c;封装安全载荷&#xff09; IKE&#xff08;Internet Key Exchange&#xff0c;因特网密钥…

分布式文件系统协议:NFS(Network File System)网络文件系统

文章目录 NFS名词解释NFS的历史版本NFS支持的操作系统NFS工作原理NFS使用的端口NFS的认证机制NFS的优点NFS使用场景推荐阅读 NFS名词解释 NFS&#xff08;Network File System&#xff09;网络文件系统是一种分布式文件系统协议&#xff0c;最初由Sun Microsystems开发&#x…

Vue中的日历组件 Calendar 实现 考勤打卡记录

日历组件 Calendar 可以自定义在页面添加内容。 实现效果图 1.由于Calendar没有右上角月份切换的API事件&#xff0c;可以给组件源码添加自定义添加一个事件 2.也可以通过自带的input事件来获取日历 3.vue页面完整代码 注释&#xff1a;this.$m(this.beginTime).format(…

揭秘程序栈:你的代码在幕后是怎么运行的?

计算机科学中&#xff0c;许多概念和原理可能会让开发者感到头疼&#xff0c;比如程序栈。这个看似晦涩的概念&#xff0c;实对我们理解程序运行至关重要。本文将以通俗易懂的方式&#xff0c;带你深入理解程序栈的工作原理和优化策略。 一、为什么需要栈&#xff1f; 栈是一…