1.反射 hasattr getattr delattr setattr 优点:事先定义好接口,接口只有在被完成后才能真正执行,这实现了即插即用,这其实是一种“后期绑定”,即先定义好接口, 然后是再去实现具体的功能 print(hasattr(p, 'age')) # True 是否有属性 判断 print(getattr(p, 'name', '没有找到该参数')) # get属性值 print(getattr(p, 'name1', 'False')) # False setattr(p,…
使用 Python importlib(动态导入模块) 可以将字符串型的模块名导入 示例: import importlib module = 'module name' # 字符串型模块名 test = importlib.import_module(module) # 导入模块 print(test.Class().attr) # 打印 Class 类的 attr 属性…
一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * import module的方式导入,这属于静态导入,很容易理解. 而如果当我们需要在程序的运行过程时才能决定导入某个文件中的模块时,并且这些文件提供了同样的接口名字,上面说的方式就不适用了,这时候需要使用python 的动态导入. importlib使用 如在scripts目录中保存着一些功能模块,向外提供类似的接口poc()和脚本描述信息description,需…
官方推荐方法: test_mod.py def hi(): print('Hi') test.py import importlib q = importlib.import_module('test_mod') #动态导入模块 q.hi() 如果导入文件夹下面的模块引号内可以这样:目录.模块名 q = importlib.import_module('app.test_mod') #动态导入模块 调用的模块:lib文件夹下面的commons.py def f1(): print('函数1')…
当导入的模块不存在时,就会报ImportError错误,为了避免这种错误可以备选其他的模块或者希望优先使用某个模块或包,可以使用try...except...导入模块或包的方式. 例如: Python 2.6/2.7提供了json 模块,但Python 2.5以及更早版本没有json模块,不过可以安装一个simplejson模块,这两个模块提供的函数签名和功能都一模一样. 试写出导入json 模块的代码,能在Python 2.5/2.6/2.7都正常运行 try: import json exc…
直接贴代码吧,有需要的话,可以根据自己的需要修改部分代码: public BigDecimal getByAttributeName(ThmdGwqriR thmdGwqriR, String attributeName){ for (Field field : thmdGwqriR.getClass().getDeclaredFields()) { field.setAccessible(true); try{ if (attributeName.toLowerCase().equals(fi…
当在写代码时,我们希望能够根据传入的选项设置,如args.model来确定要导入使用的是哪个model.py文件,而不是一股脑地导入 这种时候就需要用上python的动态导入模块 比如此时文件结构为: ├── models │ ├── __init__.py │ ├── cycle_gan_model.py │ └── pix2pix_model.py └── train.py 假设此时参数的设置中有: import argparse parser = argparse.ArgumentPars…
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=ABCMeta): @abstractmethod def send(self,subject,body,to,name): pass 方式二 class BaseMessage(object): def send(self, subject, body, to, name): raise NotImp…
反射 reflect 反射(reflect)其实是反省,自省的意思 反省:指的是一个对象应该具备可以检测.修改.增加自身属性的能力 反射:通过字符串获取对象或者类的属性,进行操作 设计框架时需要通过反射去检测类的属性,去调用他们 反射涉及的四个函数 ​ 这四个就是普通的内置函数,没有双下划线,与print等等没有区别 hasattr getattr setattr delattr class Person: def __init__(self, name, age, gender): self.…
实现抽象类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=ABCMeta): @abstractmethod def send(self,subject,body,to,name): pass 方式二 class BaseMessage(object): def send(self, subject, body, to, name): raise NotImp…