python工程里面的类型的思考

虽然我的工程语言是python语言,在工程搭建过程中非常注意类型提示的问题。

关于方法的方法的返回值类型的问题:

常用的方式是在函数/方法书写一些尖头+类型,这样调用方能很方便的对return值进行方法的提示。这也是最常用的的一种方式。有时候对于第三方库的方法的返回值,无法类型提示的话,我们可以简单定位一下源码,可以很简单的定位到返回值的class类型(第三方库一般使用类),然后在接收的返回值的后面加上冒号+类型。 这样后续的代码书写就容易了很多,不用对着文档找方法了。

由于python这些弱类型的语言存在“鸭子类型”的问题(可自行百度),有时候知道父类内部存储的是什么东西。比如我想用python设计一个链表,并且链表里面存什么类型的东西(可以统一存一个dict结构,或者一个str结构),是自由的,但是父类里面不知道肚子里面放的是什么东西(或者说父类里面存放了链表的基本方法),我们又设计了dict内容的链表子类,子类在get_first(父类的方法)的时候,父类是不知道返回的是什么类型的,此时就无法直接做类型提示,当然可以通过“在接收的返回值的后面加上冒号+类型”的方法进行类型提示,这里有个更聪明的方法:使用python里面的范型,可以完美解决这个问题。其实范型这个概念在其他语言里面都是存在的,比如JS的范型,C++的模版语法,都是类似的概念。在我的工作中,范型这个东西用的最典型的是重构sqlaclmy的数据操作。基础操作类+各种的表类(具体的Model操作类)。

关于类型这块还有两个点需要注意的,1、在方法参数的书写过程中,每个参数都要标记上类型。2、慎用dict,如果在同一个方法内部,上下相距比较短,还是推荐使用dict的,反之,可以考虑使用pydantic.BaseModel。 关于声明类型这块,fastapi库是里面的集大成者。这些东西在工程里面不是要不要的问题,而是如何把自己的类型都搞成类型声明或者把核心常调用的都搞成类型声明的问题。

另外关于设计模式的使用问题,也有一些技巧,总之就是pythonic的问题,直接拿过来可能会有很多的冗余代码。

posted @ 2023-03-26 22:48  xunhanliu  阅读(18)  评论(0编辑  收藏  举报