反射

 

 

class BlackMedium:
    feture='Ugly'
    def __init__(self,name,addr):
        self.name=name
        self.addr=addr

    def sell_hourse(self):
        print('【%s】 正在卖房子,傻逼才买呢' %self.name)

    def rent_hourse(self):
        print('【%s】 正在租房子,傻逼才租呢' % self.name)


print(hasattr(BlackMedium,'feture'))            #True    name是字符串,要加‘’

#
b1=BlackMedium('万成置地','天露园')
# b1.name--->b1.__dic__['name']
print(b1.__dict__)              #{'name': '万成置地', 'addr': '天露园'}
#
#--------------------------->>hasattr()
# # b1.name
# # b1.sell_hourse
# print(hasattr(b1,'name'))             #hasattr不仅仅是找b1的属性字典,而是看b1到底能不能调用它
# print(hasattr(b1,'sell_hourse'))
# print(hasattr(b1,'selasdfasdfsadfasdfasdfasdfasdl_hourse'))
#
#
#-------------------------->>getattr()
# print(getattr(b1,'name'))               #万成置地
# print(getattr(b1,'rent_hourse'))        #<bound method BlackMedium.rent_hourse of <__main__.BlackMedium object at 0x00D7DA90>>
# func=getattr(b1,'rent_hourse')
# func()                                  #【万成置地】 正在租房子,傻逼才租呢
# print(getattr(b1,'rent_hourseasdfsa')) #没有则报错AttributeError: 'BlackMedium' object has no attribute 'rent_hourseasdfsa'
print(getattr(b1,'rent_hourseasdfsa','没有这个属性'))             #没有这个属性
#                                        default=默认值
#----------------->>setattr
# # b1.sb=True
# setattr(b1,'sb',True)
# print(b1.__dict__)          #{'name': '万成置地', 'addr': '天露园', 'sb': True}

setattr(b1,'func',lambda x:x+1)
print(b1.__dict__)              #{'name': '万成置地', 'addr': '天露园', 'func': <function <lambda> at 0x009E5FA8>}
print(b1.func(10))              #11



#---------------->>delattr
# del b1.sb
# delattr(b1,'feture')
# print(
b1.__dict__)

反射的应用场景:

 当是两个人写代码时,不需要必须一个人先写完

可以实现定义好接口,接口只有在被完成时才会真正执行,这实现了即插即用,‘后期绑定’,

即可以只定义接口,后期再去实现接口的功能

class FtpClient:
    'ftp客户端,但是还没实现具体的功能'
    def __init__(self,addr):
        print('正在连接服务器[%s]' %addr)
        self.addr=addr
    def put(self):
        print('正在上传文件')

 

from ftp_client import FtpClient

f1=FtpClient('1.1.1.1')
# f1.put()

if hasattr(f1,'put'):
    func_get=getattr(f1,'put')
    func_get()
else:
    print('其他的逻辑')

 

posted @ 2019-03-26 15:39  wind_y  阅读(117)  评论(0编辑  收藏  举报