通过@overload装饰器简单地进行方法和方法的重载
项目描述
通过@overload装饰器简单地进行方法和方法的重载。
此模块允许为函数、方法、类方法、静态方法或类提供多个接口。有关重载类的注意事项,请参阅以下内容。
根据调用参数模式选择合适的实现。
例如
>>> class A(object): ... @overload ... def method(self, a): ... return 'a' ... @method.add ... def method(self, a, b): ... return 'a, b' ... >>> a = A() >>> a.method(1) 'a' >>> a.method(1, 2) 'a, b'
重载处理固定、关键字、变量(*args)和任意关键字(**keywords)参数。
它还处理注释,如果这些注释是类型的话
>>> @overload ... def func(a:int): ... return 'int' ... >>> @func.add ... def func(a:str): ... return 'str' ... >>> func(1) 'int' >>> func('s') 'str' >>> func(1.0) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "overload.py", line 94, in f raise TypeError('invalid call argument(s)') TypeError: invalid call argument(s)
此功能(以及目前该模块)需要Python 3。
结果可调用对象的文档字符串和名称(即文档)将与第一个重载的可调用对象的相匹配。
重载类
重载类允许您根据每个替代类型的__new__方法的构造参数选择类类型。
但是,有一个限制:__new__方法必须显式调用基类的__new__方法,而不是像通常那样使用super()。这是因为经过@overload处理后,该类是一个函数,而super()不喜欢传入函数。所以,而不是
@overload class A(object): def __new__(cls): # this will fail because "A" is a function now return super(A, cls).__new__(cls)
您必须
@overload class A(object): def __new__(cls): # must explicitly reference the base class return object.__new__(cls)
我将留给读者去解释他们使用@重载类的原因。
版本历史(简要)
1.1 更改了无效调用TypeError的文本。删除了调试打印。
1.0 初次发布
请查看源文件末尾的使用许可。
我想知道这个模块是否有用 - 如果您使用它,请在此https://www.ohloh.net/p/pyoverload处表明
项目详情
关闭
overload-1.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 215740c5c374b6039e1fb196e127316d3203b76795e2aa137a7f9376621b5592 |
|
MD5 | 35f44b5fc7380faca79b06d063d0e6c7 |
|
BLAKE2b-256 | 3949241d870d1f93fcd9c6d426254128ed0bc3ca524cf963d8f5414540482853 |