C++toPython迁移程序减少标识符声明丢失影响的一种技术

2024-05-13 08:59:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在谈到一个具体的例子之前,让我先提一下这个问题。作为一个在C++中有丰富经验的Python程序员,我总是缺少变量声明。我可以屈服于记录每个非平凡标识符的类型的诱惑,但我有一种感觉,那将不会是可怕的python。首先,无论是解释器还是任何工具都不解析这些非正式声明是愚蠢的。如果口译员这么做了,那将是一种完全不同的语言。你知道吗

作为编写注释的替代方法,我正在考虑切换到创建数据类型的模式,其唯一目的是强制类型/接口。它们将简化代码,并使我在早期阶段检测到类型错误。为了方便起见,我将付出一点间接的效率损失。你知道吗

例如,为了避免将“Dictionary of Employee objects indexed by employeeID”作为注释编写,我将编写一个名为“EmployeeDict”的包装类,其接口将限制可以/不能执行的操作。你知道吗

从长远来看,这样的想法是否可行?它在某种程度上打败了Python的精神吗?有经验的Python会用吗?你知道吗

对于C++中的那些,我想换个例子是

typedef std::map<EmployeeId, Employee> MyMap;

变成一种类型。(尽管我并没有实际移植任何代码。)

更新

即使它是不节奏的,正如汉弗莱特里斯奎特所证实的,我也不愿意写评论,让人阅读,而不自动进行一点类型检查。这个问题在3.5中得到解决是很好的,但是我损坏了2.7的时间,所以我会标记JSBueo的答案,直到有人能提出一种方法——“LA”断言IS实例(PARAM,DICT),但是也可以简洁地确认2.7的密钥/值的类型,稍微有点平行于C++来解决这个问题。你知道吗


Tags: 工具方法代码语言声明类型记录employee
1条回答
网友
1楼 · 发布于 2024-05-13 08:59:01

实际上,从Python3.5开始,该语言就与参数类型注释的工具捆绑在一起,这些工具可以由第三方工具进行内省—其中可能已经有一些ut了。你知道吗

总之,看看https://www.python.org/dev/peps/pep-0484/

即使您不使用任何其他工具-上面pep484中描述的方法是声明类型的“Pythonic方法”,也不会与其他第三方工具冲突。因此,如果您想按照所描述的方式编写一个工具链,那么应该从使用PEP中描述的函数注释开始创建。你知道吗

这有助于记录(如果情况允许的话,还可以执行)、参数和返回值。对于类属性,您可以根据在层次结构的abse类上构建一个特殊的__setitem__方法来检查我的答案:

Force python class member variable to be specific type

至于局部变量-除了代码注释之外,没有办法强制/检查它们的类型。你知道吗

最后一条建议是让您“在Python的道路上”记住要允许并检查接口,而不是特定的类。你知道吗

相关问题 更多 >