首页 > 编程语言 >Python基础之面向对象:7、反射

Python基础之面向对象:7、反射

时间:2022-11-07 19:00:31浏览次数:37  
标签:反射 obj target Python res self 面向对象 print

面向对象之反射

目录

一、反射

1、反射的定义

​ 主要是应用于类的对象上,在运行时,将对象中的属性和方法反射出来

2、使用的场景

​ 可以动态的向对象中添加属性和方法。也可以动态的调用对象中的方法或者属性。

3、常用方法

1.hasattr()

hasattr(obj, str)
'''
判断输入的str字符串在对象obj中是否存在(属性或方法),存在返回True,否则返回False	
'''

2.getattr()

getattr(obj, str)
'''
将按照输入的str字符串在对象obj中查找。
如找到同名属性,则返回该属性
如找到同名方法,则返回方法的引用
想要调用此方法得使用 getattr(obj,str)()进行调用。
如果未能找到同名的属性或者方法,则抛出异常:AttributeError。
'''

3.setattr()

setattr(obj,name,value)
'''
根据字符串,给对象设置/修改数据
'''

4.delattr()

delattr(obj, str)
'''
根据字符串,删除对象里的名字
'''

4、反射的实际应用

实际应用一:

​ 通过反射方法,模拟cmd命令窗口

class WinCmd:

    def tasklist(self):
        print("""
    1.学习编程
    2.学习python
    3.学习英语
    """)

    def ipconfig(self):
        print("""
        地址:127.0.0.1
        地址:上海浦东新区
        """)

    def get(self, target_file):
        print('获取指定文件', target_file)

    def put(self, target_file):
        print('上传指定文件', target_file)

    def server_run(self):
        print('欢迎进入简易版本cmd终端')
        while True:
            target_cmd = input('请输入您的指令>>>:')
            res = target_cmd.split(' ')
            if len(res) == 1:
                if hasattr(self, res[0]):
                    getattr(self, res[0])()
                else:
                    print(f'{res[0]}不是内部或者外部命令')
            elif len(res) == 2:
                if hasattr(self, res[0]):
                    getattr(self, res[0])(res[1])
                else:
                    print(f'{res[0]}不是内部或者外部命令')


obj = WinCmd()
obj.server_run()

实际应用二:

​ 通过反射方法,筛选数据

    	  # 利用反射保留某个py文件中所有的大写变量名及对应的数据值
        import settings
        print(dir(settings))  # dir列举对象可以使用的名字

        useful_dict = {}
        for name in dir(settings):
            if name.isupper():
                useful_dict[name] = getattr(settings, name)
        print(useful_dict)

        # while True:
        #     target_name = input('请输入某个名字')
        #     if hasattr(settings, target_name):
                 print(getattr(settings, target_name))
             else:
                 print('该模块文件中没有该名字')

标签:反射,obj,target,Python,res,self,面向对象,print
From: https://www.cnblogs.com/kangssssh/p/16867044.html

相关文章

  • 11月7日内容总结——派生方法实例、面向对象三大特性之封装、多态和反射
    目录一、派生方法实战二、面向对象三大特性之封装隐藏属性如何调用隐藏属性隐藏属性的作用和使用方式三、伪装伪装的操作两个小功能:删除和修改四、面向对象三大特性之多态......
  • 面向对象三
    目录派生方法实战演练面向对象三大特性之封装伪装三大特性之多态面向对象之反射反射实战案例派生方法实战演练importjsonimportdatetimed={'t1':datetime.dat......
  • Python ipython工具包
    ipython提供了丰富的工具包,用于建立Python的交互式操作,或许有用,在此处做一个标记!!!目前知道比较好用的就是支持magic函数,比如:%time这些,如果没有安装这个包,%会被视为错误语......
  • Python基础之面向对象:4、super方法实战
    派生方法实战​ 以上我们学习了通过super()的方法可以重写父类、额外添加父类中的数据,下面将通过实战案例来讲述super()方法来重写、添加父类中的功能代码需求:1、使用js......
  • 面向对象封装/多态/反射
    内容概要派生方法实战面向对象三大特性之封装三大特性之多态面向对象之反射反射实战案例练习题派生方法实战派生方法实战案例:importjsonimportdatetime#......
  • Python——面向对象(封装、多态、反射)
    Python——面向对象派生方法实战#coding:utf-8importjsonimportdatetime#dict_demo={#'t1':datetime.date.today(),#'t2':datetime.datetime.to......
  • Python decorator
    此处只做标记,没有深入更深层次了解!!!初步的了解,是decorator库可以通过注解的方式扩展方法,扩展是在不改变原有函数的情况下进行的,如下图所示:    另外,网上也看到一些......
  • Python Colorama
    此处借用CSND上的一篇博文作为使用说明,连接为:https://blog.csdn.net/qq_23845779/article/details/105991806该库的主要作用就是用来改变命令行或者控制台输出文字色彩的,......
  • Python获取MySQL的创建表sql到文件中
    importosimportpymysqlpath=r'D:\Projects\sql'ifnotos.path.isdir(path):os.mkdir(path)conn=pymysql.connect(host='192.168.1.17',user='root',......
  • Python基础28
    今日内容概要派生方法实战演练面向对象三大特性之封装面向对象三大特性之多态面向对象之反射反射的实战案例今日内容详细派生方法实战演练importjsonimportda......