python-反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1469字,纯文字阅读大概需要3分钟。
内容图文
![python-反射](/upload/InfoBanner/zyjiaocheng/648/3eff08a3dccb4d1cacdbc81da5a4ad22.jpg)
反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性
hasattr(obj,name)
# hasattr(obj, name)
# 判断一个对象是否有指定的属性name,返回True/False
# name是字符串形式的
class C:
def __init__(self, x=0):
self.x = x
c1 = C()
print(hasattr(c1, "x")) #打印 True
print(hasattr(c1, "y")) # 打印 False
print(hasattr(c1, x)) # 报错,NameError:name "x" is not defined
getattr(obj, name[, default = None])
# getattr(obj, name[, default = None])
# 返回对象指定的属性值,如果是特征属性,就是返回变量的数据值,如果是方法属性,即返回函数名
# 如果找不到指定的属性,默认就报错。如果默认部分有设置,就打印默认部分的内容
class C:
def __init__(self, x=0):
self.x = x
def getsize(self):
print(x)
c1 = C()
print(getattr(c1,"x")) # 打印0
print(getattr(c1, "y")) # 报错
print(getattr(c1,"y","您访问的属性不存在...")) # 打印:您访问的属性不存在...
getattr(c1, "getsize")() # 相当于执行 c1.getsize()函数,打印0
setattr(obj, name, value)
# setattr(obj, name, value)
# 设定对象指定属性的值,如果该属性不存在,就新建这个属性
class C:
def __init__(self, x=0):
self.x = x
c1 = C()
setattr(c1, "y", 20)
getattr(c1, "y") # 打印20
delattr(obj, name)
# delattr(obj, name)
# 删除对象中指定的属性,如果该属性存在就默默执行删除,如果不存在就报错
sys.modules[__name__]
- 反射当前模块成员:变量、函数、类 都可以
- 如果名字相同,反射最靠近的那个
#demo1:反射函数
import sys
def s1:pass
def s2:pass
hasattr(sys.modules[__name__], "s1")
#demo2: 反射类
import sys
class M1:pass
class M2:pass
hasattr(sys.modules[__name__], "M1")
内容总结
以上是互联网集市为您收集整理的python-反射全部内容,希望文章能够帮你解决python-反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。