Python_反射
''' 
反射 
    hasattr(obj, name):判断一个对象obj里是否包含名为name的属性或方法(hasattr是通过调用getattr(object, str)是否抛出异常来实现的) 
    getattr(obj, name, "default"):如果对象obj中有属性或者方法name,则打印属性str或者打印方法的地址(方法地址加上()即可运行方法),否则打印default 
    setattr(obj, name, value):方法里的参数为obj对象,name字符串,value值。字符串可能会是一个现有的属性或一个新的属性(新属性是全局变量或方法) ,增加的方法必须为全局方法或全局变量
    delattr(obj, name):参数为obj对象和模块中的name属性之一 ,该方法为删除该obj的一个指定的属性(仅删除实例对象中的属性name,并不是删除模块中的)   
'''  
  
def bulk():  
    print("UserPython is yelling...")  
  
  
class People(object):  
    def __init__(self, name):  
        self.name = name  
  
    def talk(self):  
        print("%s is talking..." % self.name)  
  
User = People("UserPython")  
  
# 判断一个对象User里是否是否存在方法或属性  
print(hasattr(User, "name")) #True  
  
# 根据字符串去获取User对象里的对应的属性或方法的内存地址  
print(getattr(User, "name", "default")) #>>>UserPython  
print(getattr(User, "talk", "default")) #>>><bound method People.talk of <__main__.People object at 0x00000000026F1320>>  
print(getattr(User, "talk", "default")()) #>>>UserPython is talking... None (如果有talk,运行talk方法,并打印None,否则打印default)  
  
#给People模块增加一个全局变量age = 19,创建成功返回None  
setattr(User, "age", 19)  
print(User.age) #>>>19  
#给People模块增加一个全局方法 
setattr(User, "BULK", bulk)  
User.BULK() #>>>UserPython is yelling...


#删除实例对象中某个属性或方法,模块中该属性不会被删除
delattr(User, "name") #删除User实例name属性 ===  del User.name
# print(User.name) #>>>AttributeError: 'People' object has no attribute 'name'证明已经删除了属性name
动态导入模块





阅读更多
版权声明:本文为博主UserPython原创文章,未经博主允许可以随便转载。转载请注明出处,谢谢合作!如有错误欢迎指正,感激不尽! https://blog.csdn.net/UserPython/article/details/79953698
文章标签: Python 反射
个人分类: 面向对象编程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Python_反射

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭