iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的反射知识点总结
  • 313
分享到

Python中的反射知识点总结

2024-04-02 19:04:59 313人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

通过字符串映射或修改程序运行时的状态、属性、方法, 可以通过下面这4中方法 ''' 使用getattr(object, name_str, default=None) 方

通过字符串映射或修改程序运行时的状态、属性、方法, 可以通过下面这4中方法


''' 
   使用getattr(object, name_str, default=None) 方法获取object对象里
   对应的方法或者属性的内存地址
   如果是属性:直接返回属性值
   如果是方法:返回方法的内存地址     
   '''

# hasattr(object,name_str) 判断object对象是否有一个名为name_str的方法或者属性

代码演示:


# -*- coding:utf8 -*-
class  Person(object):
    def __init__(self, name):
        self.name = name

    def fun(self):
        print("%s正在玩耍" % self.name)

p1 = Person("某人飞")

name_str = input("请输入方法或者属性").strip()
# hasattr(object,name_str) 判断object对象是否有一个名为name_str的方法或者属性
if hasattr(p1, name_str):
   ''' 
   如果有就可以使用getattr(object, name_str, default=None) 方法获取object对象里
   对应的方法或者属性的内存地址
   如果是属性:直接返回属性值
   如果是方法:返回方法的内存地址     
   '''
   print(getattr(p1, name_str , 80))
   # >>>name: 某人飞
   # >>>fun : <bound method Person.fun of <__main__.Person object at 0x0000020B76A81370>>
   # 所以如果是方法,那么可以这么处理
   a = getattr(p1, name_str)
   a()
else:
    print("该对象没有这些属性和方法")

判断和获取的演示

如果对象没有从键盘录入的该方法,那么可以使用,setattr添加一个方法


def bulk(self):
    print("这是在%s对象的类外部创建的方法"%self.name)


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

    def fun1(self):
        print("%s正在玩耍" % self.name)

p1 = Person("某人飞")
name_str = input("请输入您的方法或者属性").strip()
if hasattr(p1, name_str):
    a = getattr(p1, name_str)
    a()
else:  #如果没有这个方法,那么为其创建一个已经存在的方法
    """
    setattr(p1, name_str, bulk)
    为对象p1添加一个已经存在的bulk的方法,命名为name_str
    """
    setattr(p1, name_str, bulk)
    a = getattr(p1, name_str)
    a(p1)
"""
运行结果
请输入您的方法或者属性ui
这是在某人飞对象的类外部创建的方法
"""

setattr(p1, name_str, bulk)添加方法

如果对象没有从键盘录入的该方法,那么可以使用,setattr添加一个属性


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

p1 = Person("某人飞")
name_str = input("请输入您的方法或者属性").strip()
if hasattr(p1, name_str):
    a = getattr(p1, name_str)
    print(a)
    # 也可以同setattr修该已有属性的值
    setattr(p1, name_str, "飞")
    print(p1.name)
else:  #如果没有这个属性,那么为其添加一个属性 ,并为其设置一个默认值20
    setattr(p1, name_str, 20)
    a = getattr(p1, name_str)
    print(a)
"""
运行结果:
请输入您的方法或者属性name
某人飞
飞

运行结果:
请输入您的方法或者属性age
20
"""

setattr(p1, name_str, index)添加属性

删除对象中的属性和方法(其中方法并不能删除)


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

    def fun(self):
        print("这是一个实例方法")

p1 = Person("某人飞")
name_str = input("请输入您的方法或者属性").strip()
if hasattr(p1, name_str):
    # 删除这个对象的属性或者方法
    delattr(p1, name_str)
else:
    pass

print(p1.name)
p1.fun()
"""
运行结果:
请输入您的方法或者属性name
AttributeError: 'Person' object has no attribute 'name'

运行结果:
请输入您的方法或者属性fun
AttributeError: fun
"""

delattr(p1, name_str)只能删除属性,和动态添加的方法

注意:通过delattr能够删除通过setattr动态添加的方法,其实也是一个假象。真相是通过setattr添加的一个方法并不是真的给这个对象添加了一个方法,而是添加了一个属性,setattr方法的第二个参数就是这个属性的名字,然后这个属性的值是一个指向外部函数的引用地址,所以当我们调用这个对象的属性时,实际上是间接调用了这个函数,看起来就像是这个对象添加了一个方法一样,但本质上仍然是添加的一个属性。不管是setattr和delattr,其实都只能针对对象的属性进行操作,它们对对象的方法是无法直接操作的。

到此这篇关于python中的反射知识点总结的文章就介绍到这了,更多相关Python中的反射内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python中的反射知识点总结

本文链接: https://www.lsjlt.com/news/157740.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中的反射知识点总结
    通过字符串映射或修改程序运行时的状态、属性、方法, 可以通过下面这4中方法 ''' 使用getattr(object, name_str, default=None) 方...
    99+
    2024-04-02
  • 【Java-15】反射知识总结
    01_类的加载 类的加载过程类的加载时机 类的加载 当程序在运行后,第一次使用某个类的时候,会将此类的class文件读取到内存,并将此类的所有信息存储到一个Class对象中 说明:Class对象是指java.lang.Class类...
    99+
    2023-08-16
    java
  • Python知识点总结
    本篇内容介绍了“Python知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 为什么要使用描述符?假想你正在给学校写一个成绩管理...
    99+
    2023-06-16
  • Python中字典的知识点总结
    这篇文章主要讲解了“Python中字典的知识点总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中字典的知识点总结”吧!一、概述字典的每个键值(key=>value)对用冒...
    99+
    2023-06-02
  • Python中set集合的知识点总结
    本篇内容介绍了“Python中set集合的知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!集合的简介集合是一个无序、不重复的序列它的...
    99+
    2023-06-20
  • Python基础知识点总结
       学了一年多的Python,去年做了一段时间的爬虫项目,近来在做数据分析和机器学习的东西,抽空整理一下以前学的Python基础知识点,有借鉴与总结。具体知识点后续会分段展开深入。     1.到底什么是Python?你可以在回答中与...
    99+
    2023-01-31
    知识点 基础 Python
  • Python基本知识点总结
    Python注释 python中单行注释采用 # 开头。 python 中多行注释使用三个单引号(''')或三个双引号(""")...
    99+
    2024-04-02
  • 总结DOM的知识点
    这篇文章主要介绍“总结DOM的知识点”,在日常操作中,相信很多人在总结DOM的知识点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”总结DOM的知识点”的疑惑有所帮助!接下来,...
    99+
    2024-04-02
  • mysql中表的知识点总结
    这篇文章主要介绍“mysql中表的知识点总结”,在日常操作中,相信很多人在mysql中表的知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中表的知识点总结”...
    99+
    2024-04-02
  • Java基础之反射技术相关知识总结
    目录一、反射概念二、反射应用场景三、反射更多细节一、反射概念 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类...
    99+
    2024-04-02
  • java中Supplier知识点总结
    1、说明 这个接口是提供者的意思,只有一个抽象的get,没有默认的方法和静态的方法,导入一个泛T,get方法,返回一个泛T。 supplier也用于创建对象,但与传统的创建对象语法不...
    99+
    2024-04-02
  • Python爬虫突破反爬虫机制知识点总结
    1、构建合理的HTTP请求标头。 HTTP的请求头是一组属性和配置信息,当您发送一个请求到网络服务器时。因为浏览器和Python爬虫发送的请求头不同,反爬行器很可能会被检测到。 2、...
    99+
    2024-04-02
  • MySQL MVCC的知识点总结
    本篇内容介绍了“MySQL MVCC的知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1).Mul...
    99+
    2024-04-02
  • Java中的引用知识点总结
    本篇内容介绍了“Java中的引用知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!强引用:默认情况下,对象采用的均为强引用(这个对象的...
    99+
    2023-06-05
  • python 基础知识点归纳总结
    目录 1. python 基础知识点归纳总结1.1. 变量1.2. 数据类型1.3. 控制流语句1.3.1. if 语句1.3.2. for 循环1.3.3. while 循环 1.4....
    99+
    2023-10-20
    python 开发语言
  • 35个高级Python知识点总结
    No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function)也是对象,而且Python的代码和模块也都是对象。 Pyt...
    99+
    2023-01-31
    知识点 高级 Python
  • Java泛型机制与反射原理相关知识总结
    一、泛型的概念 1.1 基础案例 泛型在Java中的应用非常广泛,最常见则是在集合容器中,先看下基础用法: public class Generic01 { public...
    99+
    2024-04-02
  • Python中反射和描述器总结
    反射在Python中,能够通过一个对象,找出type、class、attribute或者method的能力,成为反射。 函数与方法 内建函数:getattr(object,name[,degault])  通过name返回object的属性...
    99+
    2023-01-31
    反射 Python
  • python route 知识总结
    route 可以从url提取相应的参数,如controller,action或者其它用户自己定义的变量 1.Mapper().connect    Mapper().match [python] view plaincopy...
    99+
    2023-01-31
    知识 python route
  • python中复数的共轭复数知识点总结
    在Python中,复数可以使用内置的complex类来表示。复数由实部和虚部组成,实部和虚部都是浮点数。复数的共轭复数可以通过改变虚...
    99+
    2023-08-15
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作