运维开发网

overloader:在Python中实现重载

运维开发网 https://www.qedev.com 2021-01-15 09:31 出处:51CTO 作者:mb5ff590c45613d
overloader:在Python中实现重载诗书塞外Python程序员Python中实现重载,一般都需要对参数进行识别和转化。这样做不是很直观,需要添加一些琐碎的逻辑。所以boramalper实现了overloader这个库,来帮助Python增加重载的特性。使用了overloader的代码看起来像这样,和c++/java中的重载特性非常的相似。importtypingfromoverloade

overloader:在Python中实现重载

诗书塞外 Python程序员

overloader:在Python中实现重载

Python中实现重载,一般都需要对参数进行识别和转化。这样做不是很直观,需要添加一些琐碎的逻辑。所以boramalper实现了overloader这个库,来帮助Python增加重载的特性。

使用了overloader的代码看起来像这样,和c++/java中的重载特性非常的相似。


import typing
from overloader import overload

@overload
def simple_func(a, b):
    return "First simple_func"

@overloa
ddef simple_func(a, b, c, d=32, *, ka, dka="default"):
        return "Second simple_func"

print(simple_func(3, 14))
print(simple_func(3, 14, 15, ka="pi"))

@overload
def typed_func(a: typing.Union[int, float], d: typing.Dict[int, int]):
    return "First typed_func"

@overload
def typed_func(a: int, b: typing.Dict[int, str]):
    return "Second typed_func"

print(typed_func(2, {71: 82}))
print(typed_func(2, {71: "a string"}))

"""
Works for normal methods and staticmethods as well.
"""
class C:    
 @classmethod
    @overload
    def class_method(cls, a: str, b: int):
         return "First class_method"

    @classmethod
    @overload
    def class_method(cls, a: str, b: float):
        return "Second class_method"
 
c = C()
print(c.class_method("pi", 3))
print(c.class_method("e", 2.7182))

如果你对这个库感兴趣,可以安装并尝试它:


pip3 install overloader

该项目的地址在

https://github.com/boramalper/overloader

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号