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

动态导入模块

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值