Python进阶系列:(八)python反射

2023-11-05

文章目录


前言

Python系列文章主要是记录自己学习成果及知识输出整合,提供一个温故而知新的场所。


一、反射

1、什么是反射?
	把字符串映射到实例的变量或实例的方法(只通过字符串调用类中的变量或方法)
	反射的本质(核心):利用字符串的形式去操作对象/模块中成员(方法/对象)
	基于字符串的事件驱动
2、反射四个重要的方法
	getattr 获取对象属性/对象方法
	hasattr 判断对象是否有对应的属性和方法
    delattr 删除指定的属性
    setattr 为对象设置内容
"""闭包函数表现形式1  内部函数的局部变量可以在外部访问"""
class Testobj:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def fun1(self):
        print('执行fun1方法')

def fun2():
    print('类的外部方法')

if __name__ == '__main__':
    """1、getattr 获取对象属性/对象方法"""
    xiao = Testobj('xiaom', 20)
    # 获取对象的属性
    print(getattr(xiao, 'name'))
    # 执行对象的方法
    result = getattr(xiao, 'fun1')
    result()
    """2、hasattr 判断对象是否有对应的属性和方法"""
    if hasattr(xiao, 'adderss'):
        print(getattr(xiao, 'adderss'))
    if hasattr(xiao, 'fun1'):
        print(getattr(xiao, 'fun1'))

    """3、delattr 删除指定的属性"""
    if hasattr(xiao, 'adderss'):
        print(delattr(xiao, 'adderss'))
    if hasattr(xiao, 'fun1'):
        print(delattr(xiao, 'fun1'))
    """4、setattr 为对象设置内容"""
    # 修改属性
    setattr(xiao, 'name', 'winner')
    print(getattr(xiao, 'name'))
    # 修改方法(fun3为新名称,fun1为老名称)相当于增加了一个方法到类里面,可以用实例对象进行引用
    setattr(xiao, 'fun3', fun2)
    getattr(xiao, 'fun3')()
    # 使用实例对象引用 外部方法
    xiao.fun3()

示例

"""
实现某个业务,定义类,类里面封装很多方法,提供一个统一的入口能够调用各种方法
业务:登录  退出  注销  注册
"""
class Demo:
    def login(self):
        print('这是登录')

    def exit(self):
        print('这是退出')

    def logout(self):
        print('这是注销')

    def regist(self):
        print('这是注册')

    # 提供一个run函数(一个统一的入口),通过以字符串的形式传入参数(函数名),就可的访问所有方法
    def run(self, i):
        getattr(self, i)()

Demo().run('exit')

总结

以上就是文章要表达的内容,本文介绍了Python如何利用反射来建立函数机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python进阶系列:(八)python反射 的相关文章

随机推荐

  • Xml中SelectSingleNode用法详解(转)

    最常见的XML数据类型有 Element Attribute Comment Text Element 指形如
  • redis sentinel搭建以及在jedis中使用

    一 redis主从搭建 1 搭建redis master 1 gt redis安装 mkdir p usr local webserver redis 安装目录 cd usr local webserver redis wget http
  • Java使用POI操作Excel合并单元格

    合并单元格的方法 指定 4 个参数 起始行 结束行 起始列 结束列 然后这个区域将被合并 CellRangeAddress region new CellRangeAddress startRow endRow startCol endCo
  • 某站webpack打包JS逆向,keyCipher、keySM2Cipher参数分析

    文章目录 前言 一 抓包分析 二 参数解析 1 加密定位 2 参数分析 三 响应解密 1 加密定位 总结 前言 今天来水一篇文章 某站webpack打包类型 登录 数据解密参数keyCipher keySM2Cipher 本文章仅供学习研究
  • 11. 实战:bs4法抓取网页图片并保存到本地文件夹

    前言 我们通过前面几节的学习已经了解到bs4模块对于我们抓取网页的方便之处 也通过一个实例实践了抓取某网站菜价 本节我们以某图片网为例 链接放评论区 实现抓取唯美壁纸栏目的内容并保存到本地文件夹 目标 思路 1 获取所有子页面链接地址 2
  • 数据库系统之函数依赖

    Functional Dependencies 什么是函数依赖 如何发现关系表中的函数依赖关系 函数依赖关系与对象的类 功能依赖与关联 函数依赖性的派生 阿姆斯特朗公理 Armstrong axioms 其他的推理规则 References
  • python如何学习(三)

    最近开始整理python的资料 博主建立了一个qq群 希望给大家提供一个交流的同平台 78486745 一 第一个Python程序 HelloWorld python的第一个程序也从hello world开始吧 usr bin env py
  • linux ipv6内核编译,linux ipv6内核设置

    linux ipv6内核设置 进入 proc sys net ipv6 conf all forwarding Type BOOLEAN 在两个接口之间进行global IPv6 forwarding 数据包转发 IPv6 当中您不能单独控
  • 使用 tf-idf 提取关键词

    tf idf 的简要介绍 tf term frequency 某个关键词在整篇文档中出现的频率 idf inverse document frequency 逆文档频率 某个词在所有文档中出现的频率 tf 公式 t f i j n i j
  • [C++11] nullptr 和 NULL

    在工作中 避免产生 野指针 最有效的方法 是以下两点 1 在定义指针的同时完成初始化操作 即便该指针的指向尚未明确 也要将其初始化为空指针 2 在delete释放该指针后 对该指针赋值为空指针 C 11 新增关键字 nullptr 专门用来
  • jmeter之接口数据与数据库数据检验!

    前言 本文讲解使用jmeter测试接口 然后与数据库里面的数据进行校验对比 本节使用一个新增数据的接口 新增一条数据 然后在数据库里面进行查询 是否能够查询到此条数据 一 接口环境搭建 1 1 新建一个http请求 写好请求的内容 我的大概
  • JavaEE 笔记03:基于Vue,SpringBoot的前后端分离的简单作业管理系统

    基于Vue SpringBoot的前后端分离的简单作业管理系统 目录 基于Vue SpringBoot的前后端分离的简单作业管理系统 前言 环境 开发环境 部署环境 功能展示 登录与注册 学生 学生首页 学生查看作业列表 学生提交作业 学生
  • Puppeteer基础入门、常见应用、利用谷歌插件编写Puppeteer脚本

    前言 Puppeteer已经听说过很多次了 也见过一些与之相关的文章 但是一直没怎么研究过 现在来简单学习一下 简介 Puppeteer 是一个 Node 库 它提供了一个高级 API 来通过 DevTools 协议控制 Chromium
  • 前端学习——html

    1 页面标签包含在里 其中有头和躯干 一 head里的常用标签设置 meta标签的设置 在网页中 meta标签最常用的设置是用来设置字符集
  • 静态和动态类型编程语言的区别

    静态和动态是针对变量的数据类型而言的 区别如下 1 使用静态类型语言编写的代码中 要声明变量的数据类型 而且不同数据类型的变量不允许直接赋值 它的数据类型是编译期间进行检查的 2 静态类型语言在使用变量之前 需要为它们分配好内存 3 静态类
  • python画折线图两种写法

    import matplotlib pyplot as plt from openpyxl import load workbook 这个是从Excel表格中导入数据 为了让中文不显示成乱码 plt rcParams font sans s
  • java中锁的面试题

    1 synchronized锁 悲观锁 同步锁 synchronized关键字 表示 同步 的 它可以对 多行代码 进行 同步 将多行代码当成是一个完整的整体 一个线程如果进入到这个代码块中 会全部执行完毕 执行结束后 其它线程才会执行 这
  • Linux学习整理-网络命令集

    目录 前提 1 机器IP地址查询 1 1 ifconfig 1 1 1 安装包 1 1 2 执行命令 1 1 3 拓展 ifconfig的其它用法 1 1 4 常用的属性说明 1 2 ip addr 1 2 1 查看IP地址 1 2 2 其
  • 【实战】区块链技术如何应用于金融领域?

    信任是金融业的基础 为维护信任 金融业的发展催生了大量的中介机构 包括托管机构 第三方支付平台 公证人 银行等 然而 中介机构处理信息依赖人工 且交易信息往往需要经过多道中介的传递 这使得信息出错率高 且效率低下 同时 人们也通常认为权威机
  • Python进阶系列:(八)python反射

    文章目录 前言 一 反射 总结 前言 Python系列文章主要是记录自己学习成果及知识输出整合 提供一个温故而知新的场所 一 反射 1 什么是反射 把字符串映射到实例的变量或实例的方法 只通过字符串调用类中的变量或方法 反射的本质 核心 利