通过@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 |