首页 > 编程语言 >Python教程: 反射及常用的几种方法

Python教程: 反射及常用的几种方法

时间:2024-05-21 16:43:43浏览次数:15  
标签:反射 教程 obj name Python jim str 方法 choise

反射就是通过字符串映射或修改程序运行时的状态、属性、方法

有四个常用方法:

  • hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法

  • getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址

  • setattr(obj,key,value) 为对象Obj新增或修改属性或者方法

  • delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法

反射Demo举例:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

'''
hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址
setattr(obj,key,value) 为对象Obj新增或修改属性或者方法
delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
'''
def bulk(self):
    print("%s is yelling"%self.name)
 
class Dog(object):
    def __init__(self,name):
        self.name=name
 
    def eat(self,food):
        print("%s is eating %s"%(self.name,food))
 
jim=Dog("Jim")
choise=input(">>输入需要执行的操作:").strip()
if hasattr(jim,choise):
    func=getattr(jim,choise)
    func("巧克力")
    #delattr(jim,choise)
else:
	#Python学习交流群:153708845
    #动态装配一个方法 choise为方法名,bulk为方法的内存地址
    setattr(jim,choise,bulk)
    # 调用时用转配的方法名,即传入的choise值,这里需要传入对象本身
    getattr(jim,choise)(jim)
    #动态装配一个属性,也可以修改属性
    setattr(jim,choise,"新装配的属性")
    print(getattr(jim,choise))
#print(jim.name)
#jim.eat("狗粮")

标签:反射,教程,obj,name,Python,jim,str,方法,choise
From: https://www.cnblogs.com/xxpythonxx/p/18204386

相关文章

  • Python教程:拆分多级目录的方法
    实现多级目录差分,举例说明如下:假设现有的目录结构如下:1、2、2.1、2.2、2.3、2.4、3、4、5、6、6.1、6.1.1、6.1.2、6.1.3、6.1.4、6.2、6.3、6.4、7、8、9、10。经过差分后,得到的各级目录为:一级目录:1、2、3、4、5、6、7、8、9、10二级目录:2.1、2.2、2.3、2.4和6.1、6.2、6......
  • mac anaconda pycharm python3.6 tensorflow 1.1.0
     condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/osx-arm64/condacreate-npy36python=3.6     ps:当加载卡住的时候,强制退出存在下载的包都消失的情况......
  • 在Docker中安装GaussDB的ODBC驱动并添加Python测试代码
    #使用官方的Ubuntu20.04镜像作为基础镜像FROMubuntu:20.04#设置环境变量以避免交互式安装提示ENVDEBIAN_FRONTEND=noninteractive#更新包列表并安装必要的软件包RUNapt-getupdate&&\apt-getinstall-y\wget\curl\gnupg2\apt-transport-https......
  • .NET中特性+反射 实现数据校验
    .NET中特性+反射实现数据校验在.NET中,我们可以使用特性+反射来实现数据校验。特性是一种用于为程序中的代码添加元数据的机制。元数据是与程序中的代码相关联的数据,但不直接成为代码的一部分。通过特性,我们可以为类、方法、属性等添加额外的信息,这些信息可以在运行时通过反射获取......
  • 在Docker中安装SQL Server的ODBC驱动并添加Python测试代码
    #使用官方的Ubuntu20.04镜像作为基础镜像FROMubuntu:20.04#设置环境变量以避免交互式安装提示ENVDEBIAN_FRONTEND=noninteractive#更新包列表并安装必要的软件包RUNapt-getupdate&&\  apt-getinstall-y\  wget\  curl\  gnupg2\ ......
  • 在Docker中安装MySQL的ODBC驱动并添加Python测试代码
    #使用官方的Ubuntu镜像作为基础镜像FROMubuntu:20.04#设置环境变量以避免交互式安装提示ENVDEBIAN_FRONTEND=noninteractive#更新包列表并安装必要的软件包RUNapt-getupdate&&\  apt-getinstall-y\  build-essential\  curl\  apt-trans......
  • 在Docker中安装PostgreSQL的ODBC驱动并添加Python测试代码
    #使用官方的Ubuntu镜像作为基础镜像FROMubuntu:20.04#设置环境变量以避免交互式安装提示ENVDEBIAN_FRONTEND=noninteractive#更新包列表并安装必要的软件包RUNapt-getupdate&&\  apt-getinstall-y\  build-essential\  unixodbc\  unixo......
  • C#如何用最简单方法调用Python?
    最近有群友咨询C#如何调用Python?小编尝试Python.NET过程中遭遇的版本兼容性和环境配置难题,小编决定寻找一个更为简单、稳定且对初学者友好的解决方案。小编搜索一番,除了Python.NET之外,还有其他途径能够帮助我们轻松地在C#项目调用Python脚本,那就是通过命令行调用,使用System.Diagn......
  • Python之快排算法
    快排算法的思路:从list中取出下标为0的值定义三个list进行循环,大于list[0]放入一个A,小于的放入B,其他的放入C拼接:A+C+B代码实现:list=[13,8,11,17,5,6,1,1,1]defQuickSort(list):iflen(list)<=1:#判断如果小于等于1,则无需排序,直接返回即可......
  • Python/Go 面试题目整理
    目录一、Python基础知识1.1可变与不可变数据类型1.8深浅拷贝1.2PEP8编程规范1.3匿名函数1.4装饰器1.5迭代器1.6生成器1.7面向对象编程思想1.7.1Python中的__new__和__init__的区别1.7.2反射1.7.3面向对象1.7.4鸭子类型1.7.5你对Python的继承怎么看?1.9GC机制1.10......