实现常见行为的方法和函数处理程序

good-handlers的Python项目详细描述


好的处理者

在不编写整个函数的情况下实现常见行为的方法和函数处理程序

处理程序

处理程序是在类中充当方法的对象。它们适用于可配置的预定义功能,否则这些功能将是多余的。处理程序功能是在标准python的__call__方法中实现的,否则它将处理程序视为函数。

fromgood_handlersimportInstanceHandlerclassMyHandler(InstanceHandler):def__init__(self,scale):self._scale=scaledef__call__(self,instance,arg1,arg2):instance.result=scale*(arg1+arg2)

InstanceHandler绑定到实例。这需要额外的instance参数,它将成为处理程序的绑定实例

fromgood_handlersimportInstanceHandlerclassMyHandler(InstanceHandler):def__init__(self,scale,save='last_result'):self._scale=scaleself._save=savedef__call__(self,instance,arg1,arg2):setattr(instance,self._save,scale*(arg1+arg2))classMyClass:def__init__(self):self.last_result=Nonehandler=MyHandler(3)

ClassHandler绑定到一个类,并将绑定的类传递给额外的klass参数。

fromgood_handlersimportClassHandlerclassDefaultAgePersonMaker(ClassHandler):def__init__(self,defage):self._defage=defagedef__call__(self,klass,name):returnklass(name=name,age=self._defage)classPerson:make_twenty_year_old=DefaultAgePersonMaker(20)def__init__(self,name,age):self._name=nameself._age=agejim=Person.make_twenty_year_old('Jim Shim')# Makes Person('Jim Shim', 20)

初始化处理程序

冗余编程的一个特例是__init__方法。通常,__init__只用于设置一系列成员变量。因此,它们通常包含许多样板代码。好的库提供了几个__init__处理程序,简化了创建__init__方法的过程。NamedInitHandler根据names参数中提供的名称元组设置成员变量。

fromgood_handlers.initimportNameInitHandlerclassPerson:__init__=NameInitHandler(names=('name','age','apparel','thoughts'))

这些值的默认值可以在defaults参数中作为dict提供。

fromgood_handlers.initimportNameInitHandlerclassPerson:__init__=NameInitHandler(names=('name','age','apparel','thoughts'),defaults={'apparel':'Pajamas','thoughts':'Nothing at the moment...'})

UnderscoreInitHandler是一种NamedInitHandler类型,在实例中设置每个名称之前,它会在每个名称后面附加一个下划线_DunderInitHandler在每个名称前添加dunder或双下划线__

字符串处理程序

冗余编程的另一种情况是字符串表示。好的库提供ValueStringHandler,它打印要显示的对象名和给定键的值,以及KeyValueStringHandler,它类似于ValueStringHandler,但显示键=值对,而不只是值

fromgood_handlers.stringimportValueStringHandler,KeyValueStringHandlerclassPerson1:"""    Docstring for Person    """def__init__(self,name,age):"""        Initializes instance        """self.name=nameself.age=age__repr__=ValueStringHandler(('name','age'))classPerson2:"""    Docstring for Person2    """def__init__(self,name,age):"""        Initializes instance        """self.name=nameself.age=age__repr__=KeyValueStringHandler(('name','age'))john1=Person1('John Numberone',21)john2=Person2('John Numbertwo',28)print(john1)# prints 'Person1(\'John Numberone\', 21)'print(john2)# prints 'Person2(name=\'John Numbertwo\', age=28)'

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

推荐PyPI第三方库


热门话题
java Jsonify使用Jackson来定义嵌套对象   在Swing中禁用java图形调试   java Selenium Webdriver拖放在Jenkins上不起作用   java我对一个显示器的问题有一个非常不切实际的询问   java增强的“for”循环导致ArrayIndexOutOfBoundsException   ArrayAdapter适用于Java中的安卓编程,字符串数组   linux在Ubuntu上通过PulseAudio播放Java音频文件时出错   java在Spring应用程序中加载内部(类路径)和外部属性文件   java使用Maven连接到mySQL   Java应用程序的设计   websocket在电报api java中与dc的连接   java XMLStreamException,因为xml中的(&N)   java从控制台输出到JTextArea   Java导出文本文件   java实现parseInt方法   java为什么servlet容器会同步对特定资源/servlet的多个请求的访问?   循环中的Java“while”变量   用Java编程一个国际象棋游戏,gameOver布尔不起作用   java如何获得真正的JPanel大小?