反射 attr方法

概念

**反射:**主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省),
四个可以实现自省的函数:
hasattr(object,name)
getattr(object,name,default=None)
setattr(x,y,z)
delattr(x,y)

四个函数的用法

class BlackMedium:
    feture='Ugly'
    def __init__(self,name,addr):
        self.name=name
        self.addr=addr
    def sell_house(self):
        print('[%s] 正在卖房子,千万别买'%self.name)
    def rent_house(self):
        print('[%s] 正在租房子,千万别租'%self.name)
b1=BlackMedium('saas','北京')
b1.name
b1.sell_house()
#检测b1能否调用到name这和sell_house这两个属性
print(hasattr(b1,'name'))
print(hasattr(b1,'sell_house'))
#找到函数地址
print(getattr(b1,'name'))
print(getattr(b1,'sell_house'))
func=getattr(b1,'sell_house')
func()
print(getattr(b1,'adsdsd','没有这个属性'))
#设置b1.sb=True等同于setattr(b1,'sb,True')
b1.sb=True
setattr(b1,'sb',True)
#加入函数属性
setattr(b1,'func',lambda x:x+1)
setattr(b1,'func1',lambda self:self.name+'23131')
print(b1.__dict__)
print(b1.func)
print(b1.func(10))
print(b1.func1(b1))
#删除del b1.sb等同于delattr(b1,'sb')
delattr(b1,'sb')
print(b1.__dict__)

结果

[saas] 正在卖房子,千万别买
True
True
saas
<bound method BlackMedium.sell_house of <__main__.BlackMedium object at 0x000000A669B7AD68>>
[saas] 正在卖房子,千万别买
没有这个属性
{'name': 'saas', 'addr': '北京', 'sb': True, 'func': <function <lambda> at 0x000000A6687F1F28>, 'func1': <function <lambda> at 0x000000A669B80B70>}
<function <lambda> at 0x000000A6687F1F28>
11
saas23131
{'name': 'saas', 'addr': '北京', 'func': <function <lambda> at 0x000000A6687F1F28>, 'func1': <function <lambda> at 0x000000A669B80B70>}

应用场景:

#A和B两个人共同写一个代码,A写完class Ftp后有事情需要暂停一下工作,然后b再这段时间里还需要继续写
#A写的代码:
class Ftp:
    def __init__(self,addr):
        print('正在连接服务器【%s】'%addr)
        self.addr=addr
    #执行一遍后加上put函数
    def put(self):
        print('正在运行')
#B写的代码:
#B在写代码的时候看不到A的代码,可以通过下面的方式继续写而不影响A的
f1=Ftp('198.12.12.12')
#B想写一个put方法,首先要判断A写的那一部分里有没有这个方法
if hasattr(f1,'put'):
    #有则先找到‘put’这个方法的地址,把地址赋给func_put,然后通过func_put()来执行
    func_put=getattr(f1,'put')
    func_put()
else:
    print('其他逻辑')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值