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

文章目录

  • 前言
  • 一、反射
  • 总结


前言

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如何利用反射来建立函数机制。

你可能感兴趣的:(Python进阶系列,python,开发语言)