首页 > 编程语言 >14 Python面向对象编程:反射

14 Python面向对象编程:反射

时间:2024-09-06 10:26:20浏览次数:11  
标签:反射 14 Python object instance 面向对象编程 my 属性

本篇是 Python 系列教程第 14 篇,更多内容敬请访问我的 Python 合集

在Python中,“反射”通常指的是根据字符串查找并执行相关的类、方法或者属性的能力。Python提供了几个内置函数和语法特性来支持这种能力,比如getattr(), setattr(), hasattr(), delattr()以及dir()等。这些功能使得程序可以在运行时动态地获取和设置对象的属性和方法,从而增强代码的灵活性。

前面函数那一篇粗略的介绍了Python内置函数,也讲到了getattr()等内置函数,下面再系统具体的介绍一下。

常见的反射相关函数

  1. getattr(object, name[, default]):

    • 作用:从给定的对象中获取指定名字的属性值。
    • 如果属性存在,则返回该属性值;否则,如果提供了默认值,则返回默认值;如果没有提供默认值且属性不存在,则抛出AttributeError
  2. setattr(object, name, value):

    • 作用:为给定的对象设置指定名字的属性值。
    • 如果对象不允许赋值,则抛出AttributeError
  3. hasattr(object, name):

    • 作用:检查给定的对象是否具有指定名字的属性。
    • 返回布尔值。
  4. delattr(object, name):

    • 作用:删除给定对象的指定属性。
    • 如果属性不存在,则抛出AttributeError
  5. dir(object):

    • 作用:返回一个包含对象的所有属性名的列表。
    • 如果对象定义了__dir__()方法,则优先使用该方法;否则使用默认方式。

示例

下面是一些使用这些反射函数的例子:

class MyClass:
    def __init__(self):
        self.x = 10
        self.y = 20
    
    def greet(self):
        return "Hello from MyClass!"

# 创建一个MyClass的实例
my_instance = MyClass()

# 使用反射获取属性值
x_value = getattr(my_instance, 'x')
print(f"x 的值是: {x_value}")  # 输出: x 的值是: 10

# 设置一个新的属性值
setattr(my_instance, 'z', 30)

# 检查是否有某个属性
has_z = hasattr(my_instance, 'z')
print(f"my_instance 是否有属性 z? {has_z}")  # 输出: my_instance 是否有属性 z? True

# 删除属性
delattr(my_instance, 'z')

# 列出所有属性
all_attributes = dir(my_instance)
print("所有属性:", all_attributes)

使用反射的好处

  • 动态性:反射使得程序能够在运行时动态地响应变化,例如,根据不同的输入或配置加载不同的类或方法。
  • 代码重用:通过反射,可以编写通用的函数来处理不同类型的对象,只要这些对象遵循一定的接口或约定。
  • 扩展性:反射可以方便地扩展程序的功能,而无需修改现有代码。

然而,过度使用反射可能会导致代码难以理解和维护,因为它打破了静态类型语言的一些预期。因此,在使用反射时要谨慎,并确保它确实能带来便利性和灵活性。

标签:反射,14,Python,object,instance,面向对象编程,my,属性
From: https://www.cnblogs.com/GilbertDu/p/18399743

相关文章

  • 15 Python模块
    本篇是Python系列教程第15篇,更多内容敬请访问我的Python合集一个模块其实就是一个文件(以.py结尾)。使用模块的好处是便于维护和重用代码。要创建一个模块,只需编写一个新的文本文件,保存为.py扩展名。1引入模块1.1导入整个模块importmymodulemymodule.some_functi......
  • python 命令行参数解析
    追加参数pythonexample.pyNewYorkLosAngelesChicago给参数申明分配内存Locations:['NewYork','LosAngeles','Chicago']具体实现importargparseparser=argparse.ArgumentParser(description='Processsomelocations.')parser.ad......
  • 【优技教育】Oracle 19c OCP 082题库(第14题)- 2024年修正版
    【优技教育】Oracle19cOCP082题库(Q14题)-2024年修正版考试科目:1Z0-082考试题量:90通过分数:60%考试时间:150min本文为(CUUG原创)整理并解析,转发请注明出处,禁止抄袭及未经注明出处的转载。原文地址:http://www.cuug.com.cn/ocp/082kaoshitiku/38183734957.html第14题:14......
  • Python
    Python安装HelloWorldprint("HelloWorld")基础字面量:代码中被写下来固定的值,数字:Number整数int浮点数float复数complex布尔bool字符串:String(双引号)列表:List元组:Tuple集合:Set字典:Dictionary注释单行注释#开头#我是注释print("HelloWorld")......
  • Python开发实例(30)文件搜索工具:创建一个程序,允许用户在指定目录下搜索文件
    创建一个文件搜索工具是一个非常有用的项目,它可以帮助用户在指定目录下查找文件。以下是一个基本的文件搜索工具示例,它使用Python的os库来进行文件搜索。importosdefsearch_files(directory,filename):found_files=[]forroot,_,filesinos.walk(director......
  • PMP–一、二、三模、冲刺、必刷–分类–14.敏捷–技巧--累积流图
    文章目录技巧一模二模三模14.敏捷–敏捷团队的衡量结果–累积流图:1、敏捷项目的项目经理担心团队在最近的迭代中失去了动力。项目经理应该使用哪两种工具来分析团队绩效?(选择两个)冲刺必刷7.成本管理--挣值分析燃尽图仅能了解进度,不能了解成本29、[单选]一家公司正在......
  • Flask:Python轻量级Web框架详解
    Flask是一个用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展,非常适合小型项目和微服务,同时也能够支持大型应用。Flask依赖于少量的外部库,并且提供了一个简单的方式来创建Web应用。Flask的主要特点轻量级:Flask核心非常简单,使得它易于理解和扩展。扩展性:Flask可......
  • Python异步编程:asyncio库详解
    \asyncio是Python的标准库,用于编写单线程的并发代码。它使用async和await语法来定义和调用异步函数,使得I/O密集型程序能够更有效地使用资源。asyncio的主要特点事件循环:asyncio程序由事件循环驱动,它负责调度协程的执行。协程:使用async定义的异步函数被称为协程。任务:asyn......
  • Python批量采集某东评论,实现可视化分析
    女朋友没事就喜欢网购,买一大堆又不用,总说不合适,为了不让她花冤枉钱,于是我决定用Python写一个采集商品评论的脚本,然后对商品进行分析,这样就不怕踩到坑了!  让我们直接开始本次操作准备工作环境安装Python3.10Pycharm模块使用采集数据模块-DrissionPage->pipinsta......
  • Python使用MySQL数据库
    安装MySQL-python要想使python可以操作mysql 就需要MySQL-python驱动,它是python 操作mysql必不可少的模块。下载地址:https://pypi.python.org/pypi/MySQL-python/下载MySQL-python-1.2.5.zip 文件之后直接解压。进入MySQL-python-1.2.5目录:>>python setup.py install ......