泛型

第一个参数类型决定执行特定的方法体

一、单分派泛函数

  只对函数的第一个参数做类型检查,发现局限性太大,没什么特别的应用场景,也可能是我没用到

 1 from functools import singledispatch
 2 
 3 
 4 @singledispatch
 5 def func(a, *args):
 6     raise TypeError("暂不支持{}类型的执行".format(type(a)))
 7 
 8 
 9 @func.register(int)
10 def _(a, *args):
11     print(">>【{}】是整数".format(a))
12     return a + args[0]
13 
14 
15 @func.register(str)
16 def _(a, *args):
17     print(">>【{}】是字符串".format(a))
18     return a + args[0]
19 
20 
21 if __name__ == '__main__':
22     print(func(4, 5))
23     print(func("只有", ""))
24     print(func([1, 2], 3))

二、多分派泛函数

  对第一个参数以外的参数也做类型检查,保证参数类型一致性

 1 from functools import singledispatch
 2 
 3 
 4 @singledispatch
 5 def func(a, *args):
 6     raise TypeError("暂不支持{}类型的执行".format(type(a)))
 7 
 8 
 9 @func.register(int)
10 @func.register(str)
11 def _(a, *args):
12     print(">>【{}】类型检查通过".format(a))
13     if not isinstance(args[0], type(a)):
14         raise TypeError(">>【{}】类型应为【{}】".format(args[0], type(a)))
15     print(">>【{}】类型检查通过".format(args[0]))
16     return a + args[0]
17 
18 
19 if __name__ == '__main__':
20     print(func(4, 5))
21     print(func("只有", ""))
22     print(func(4, "测试"))

output:

  >>【4】类型检查通过
  >>【5】类型检查通过
  9
  >>【只有】类型检查通过
  >>【永】类型检查通过
  只有永
  >>【4】类型检查通过

  TypeError: >>【测试】类型应为【<class 'int'>】

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:泛型 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • __slots__

      在类的层次上定义时,python给实例采用一种更加紧凑的内部表示来管理属性,而非字典,这样,我们只被允许访问__slots__内部的属性   这样定义会带来两点好处,然后具体的实践我在工作中目前运用的还很少,后面如果发现还有什么坑,我再来补充 1、创建大量实例时节省内存 2、访问属性快 1 class Valley: 2 __slots__ = “nam…

    Python开发 2023年4月2日
    00
  • 生成器的反向验证

    生成器是一种特殊的迭代器,也可以说其父类型是迭代器   1、迭代器其实也有很多点要清楚,这里先不做赘述   2、要清楚,迭代器调用iter()返回的是自身 1 def func(s, e): 2 “”” 3 生成器函数 4 :param s:起始值 5 :param e: 末值 6 :return: 7 “”” 8 num = s 9 while num &…

    Python开发 2023年4月2日
    00
  • 猴子补丁

    作用:随时修改代码   (在函数或类定义完成之后,再去修改函数的实现过程) “””类似猴子补丁在函数定义好之后,再去更改他的行为”””import typesclass Valley: def func(self): return “等待宣告”def common(self): return “只有永不遏制的奋斗”if __name__ == ‘__main…

    Python开发 2023年4月2日
    00
  • 方法的多种调用方式

      方法调用确实我们每个人都会,但是我觉得大家可能用的最多的就是那种常规的方式,这里呢,我要记录一下另外几种方式 1 from operator import attrgetter 2 from operator import methodcaller 3 4 5 class Valley: 6 def func(self): 7 print(“测试方法”)…

    Python开发 2023年4月2日
    00
  • fastapi篇(一)

    fastapi是一个高性能的web开发框架 性能极高,可与 NodeJS, Go 媲美。(得益于Starlette和Pydantic)。 Starlette 是一个轻量级 ASGI 框架/工具包。它非常适合用来构建高性能的 asyncio 服务,并支持 HTTP 和 WebSockets。 官方网址:https://www.starlette.io/   P…

    python 2023年5月9日
    00
  • 钩子函数

    控制子类的的创建 1、元类   这种方式可能是最常见的也是我们最先知晓的,当然这种方式可能需要我们对元类有比较深入的了解,所以引入了下面的这种方式 2、钩子函数   __init__subclass__,字面意思,父类实现了该双下方法,其后凡是继承他的派生类,都会触发此方法,进行派生类的初始化,实现派生类属性的增加及修改 1 class Meta: 2 de…

    Python开发 2023年4月2日
    00
  • 装饰器的多种实现方式

    一、基于函数实现   1、嵌套函数   代码实现: 1 from functools import wraps 2 3 4 def decorator(param): 5 def wrapper(func): 6 @wraps(func) 7 def verify(*args, **kwargs): 8 if param == ‘g’: 9 print(“&…

    Python开发 2023年4月2日
    00
  • 编程思想

    三大编程思想:   POP:面向过程编程(Procedure Oriented Programming)   OOP:面向对象编程(Object Oriented Programming)   AOP:面向切面编程(Aspect Oriented Programming) 以下大部分内容引用腾讯云一位笔者,我也是进一步了解纯记录之目的。 POP ​   面向…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部