码迷,mamicode.com
首页 > 编程语言 > 详细

python反射详解

时间:2018-08-31 21:13:24      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:pytho   otf   print   输入   报错   not   module   lan   ima   

一、什么是反射

反射就是通过字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动

可使用反射的地方:

1、反射类中的变量 : 静态属性,类方法,静态方法
2、反射对象中的变量、对象属性、普通方法
3、 反射模块中的变量
4、反射本文件中的变量

getattr(核心)

判断类、对象或者模块中是否有相应的属性或方法。用法:getattr(obj,str,default=None) 判断obj中是否有str属性,有就返回,没有时有传入第三参数就返回第三参数,没有就报错。

 class A:
    name = zs
    age = 18
print(getattr(A,name))
print(getattr(A,language,notfound))

 

技术分享图片

 settattr

设置属性。第三参数为新的属性值

class A:
    name = zs
    age = 18
setattr(A,name,ls)
setattr(A,language,Chinese)
print(getattr(A,name))
print(getattr(A,language,notfound))

 

 技术分享图片

hasattr

判断时候有某个属性,有就返回True,没有就返回False

class A:
    name = zs
    age = 18
if hasattr(A,name):
    print(getattr(A,name))

 

delattr

删除某个属性

class A:
    name = zs
    age = 18

delattr(A,name)
print(hasattr(A,name))

技术分享图片

 

 反射本文件

sys.modulses[__name__]就是本文件对象。

import sys
class A:
    def __repr__(self):
        return 666
if hasattr(sys.modules[__name__],A):
    print(getattr(sys.modules[__name__],A)())

 技术分享图片

二、使用场景

input
        用户输入的如果是a,那么就打印1,如果输入的是b就打印2
    文件
        从文件中读出的字符串,想转换成变量的名字
    网络
        将网络传输的字符串转换成变量的名字

 

python反射详解

标签:pytho   otf   print   输入   报错   not   module   lan   ima   

原文地址:https://www.cnblogs.com/linshuhui/p/9567524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!