非常快速的依赖注入库

yapic.di的Python项目详细描述


AppVeyorCircleCITravisPyPI - Downloads

非常快Dependency Injection 对于python,它高度使用类型特性。有时更快 然后在python中进行类似的调用。

要求

  • 仅适用于Python 3.7或更高版本

  • C++11可编译编译器。(仅当您希望从源代码构建时)

    为Windows x86/x64和Linux x86/x64提供的控制盘

使用量

fromtypingimportGeneric,TypeVarfromyapic.diimport*T=TypeVar("T")classCar(Generic[T]):engine:Tdef__init__(self,engine:T):self.engine=engine# simplified Car classclassCar(Generic[T]):engine:Inject[T]classGasoline:passclassDiesel:passclassElectronic:passclassDieselCar(Car[Diesel]):passELECTRONIC_CAR=Token("ELECTRONIC_CAR")injector=Injector()injector.provide(Gasoline)injector.provide(Diesel)injector.provide(Electronic)injector.provide(DieselCar)injector.provide(ELECTRONIC_CAR,Car[Electronic])diesel=injector[DieselCar]assertisinstance(diesel,DieselCar)assertisinstance(diesel.engine,Diesel)electronic=injector[ELECTRONIC_CAR]assertisinstance(electronic,Car)assertisinstance(electronic.engine,Electronic)defdrive_diesel(car:DieselCar):assertisinstance(car,DieselCar)assertisinstance(car.engine,Diesel)injector.exec(drive_diesel)# you can set constant values, like a dictMEANING_OF_LIFE=Token("MEANING_OF_LIFE")injector[MEANING_OF_LIFE]=42assertinjector[MEANING_OF_LIFE]==42defquestion(q:MEANING_OF_LIFE):assertq==42injector.exec(question)# cached injectablelife_q=Injectable(question)# this is same as with injector.exec(question), but injectable is precachedlife_q(injector)

仅限关键字参数

classConfig(dict):def__init__(self):super().__init__(some_key=42)defget_kwarg(config:Config,*,name,type):ifname=="some_key":returnconfig[name]else:raiseNoKwOnly()deffn(*,some_key:str):assertsome_key==42injector=Injector()injector.provide(Config)injector.provide(fn,provide=[KwOnly(get_kwarg)])

有关详细信息,请参见Python Stub filetest files

释放过程

  • setup.py
  • 中更改VERSION
  • git add setup.py
  • git commit -m "chore(bump): VERSION"
  • git checkout release
  • git merge master
  • git tag -a VERSION -m "chore(bump): VERSION"
  • git push && git push --tags
  • git checkout master
  • git merge release

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java SimpleFramework和工厂方法   Java适当地处理异常   java单例类不起作用   java小程序和Swing在eclipse中不显示组件   多个键上的java Redisson FastRemove不起作用   java验证请求正文不等于模式   在Java中从URL读取数据   eche RecyclerView项的java Set自定义字体   string Java如何从Date获取HH:mm:ss   当Java应用程序落后于负载均衡器时,在某些URL上强制使用SSL   使用esapi时发生java错误   java使用流根据第二个列表中的值更新一个列表中的对象   组织。openqa。硒。Java中的NoTouchElementException WebDriver?   从JSON字符串Java创建CSV文件