编程语言
首页 > 编程语言> > python反射

python反射

作者:互联网

反射

概念与作用

反射就是通过字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员。

可使用反射的地方:

  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'))
zs
notfound

setattr

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

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

hasattr

判断是否有某个属性,有就返回True,没有就返回False

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

delattr

删除某个属性

class A:
    name = 'zs'
    age = 18
delattr(A,'name')
print(hasattr(A,'name'))
False

sys.modules[__name__]

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

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

默认情况:

class CLanguage:
    pass
clangs = CLanguage()
print(clangs) # 执行 print(clangs) 等同于执行 print(clangs.__repr__()),程序的输出结果是一样的(输出的内存地址可能不同)
# 运行结果
<__main__.CLanguage object at 0x000001A7275221D0>

对该方法进行重写:

class CLanguage:
    def __init__(self):
        self.name = "EtAl0rs"
    def __repr__(self):
        return "哈哈哈"
clangs = CLanguage()
print(clangs)
# 运行结果
哈哈哈

标签:__,反射,name,python,getattr,print,class,zs
来源: https://www.cnblogs.com/EtAl0rs/p/16370052.html