python自动绑定dict
bdict的Python项目详细描述
bdict
允许您创建自动方法绑定dict的库。
有没有梦想过写干净的口述,指出方法的关键?别再害怕了!
绑定dict主要用于事件处理程序,它由 任何事件或键,指向类中相应的处理程序函数。 在键查找时,dict将把适当的函数绑定到实例 在班上。
例如:
classServer:"""Typical server with a small mapping between event handlers and functions"""def__init__(self,name):self.name=namedefon_connect(self,remote_host):print(self.name,remote_host)defon_connect(self,remote_host):print(self.name,remote_host)handlers=BDict({NewConnectionEvent:on_connect,DisconnectonEvent:on_disconnect})>>>s=Server("myserver")>>>s.handlers[NewConnectionEvent]("1.2.3.4")myserver1.2.3.4
如您所见,在访问处理程序dict之后,在进行键查找时, dict将处理程序函数绑定到实例。
bdict还以一种简洁而时尚的方式与classmethods一起工作:
classMyClass:"""Typical server with a small mapping between event handlers and functions"""@classmethoddefclass_handle(cls):print(cls.__name__)handlers=BDict({"class_handle":class_handle})>>>MyClass.handlers["class_handle"]<boundmethodMyClass.class_handleof<class'__main__.MyClass'>>>>>MyClass.handlers["class_handle"]()MyClass>>>inst=MyClass()>>>inst.handlers["class_handle"]<boundmethodMyClass.class_handleof<class'__main__.MyClass'>>>>>inst.handlers["class_handle"]()MyClass
通过实例访问bdict时,bdict将在bdict上创建一个内部实例数据容器, 允许您修改它的字典,而不影响其他实例!
>>>inst.handlers[123]=456>>>inst.handlers[123]456>>>inst2=MyClass()>>>inst2.handlers[123]Traceback(mostrecentcalllast):...KeyError:123
用法:
BDict(dict_)
dict_
可以是dict或iterable of(key,value)对,并将用于初始化BDict
。
使用bdict的类必须支持弱引用(绝大多数自定义对象都支持)。如果使用__slots__
,则可以通过向插槽中添加__weakref__
来完成此操作。
BDict.autobind(key, value)
允许在dict中添加自动绑定项(常规添加不会自动绑定)。key
是访问的键,而value
是将自动绑定的函数。