Python随心记--反射、动态导入模块

hasatttr(object,name)   #检测对象中是否存在name属性
getattr(object,name,delault = Null)
setattr(object,x,True)
delattr(object,x) #删除属性
class BlackMedium:
    feture = 'Ugly'
    def __init__(self,name,addr):
        self.name = name
        self.addr = addr
    def sell_hourse(self):
        print('[%s] 正在卖房' %self.name)

blackmedium = BlackMedium('青年公寓','南山')
print(hasattr(blackmedium,'name'))   #存在返回True
print(getattr(blackmedium,'name','meiyouzhi'))   #存在返回值
setattr(blackmedium,'white',True)   #设置属性
setattr(blackmedium,'func',lambda x:x+1)   #加函数
print(blackmedium.func(12))
#反射使用场景
1 实现可插拔机制
2 动态导入模块
class Ftpclient:
    def __init__(self,addr):
        self.addr = addr
        print('正在连接IP:%s服务器' %self.addr)
    def put(self):
        print('正在上传文件')
from  module import  Ftpclient  #模拟Ftpclient在module模块下

ftpclien = Ftpclient('192.168.0.1')
if hasattr(ftpclien,'put'):
    func_get = getattr(ftpclien,'put')
    func_get()
else:
    print('方法不存在')
动态导入模块
module_t = __import__('m.t')   #传出字符串,类似于文明的名称
module_t.t.test()   #调用t下的test方法

import imaplib
imaplib.import_module('m.t')   #以字符串模式导入

 

posted @ 2018-12-31 23:31  爱跑步的乌龟  阅读(848)  评论(0编辑  收藏  举报