python - 当编写/阅读 python 代码时,人们如何判断变量是否是对象?

标签 python object naming-conventions

例如,如果我正在阅读一些像这样工作的代码:

list_of_objects = function_returning_object_list()
for object in list_of_objects:
    do_something(object.param)

如果您只是阅读代码并且不知道 function_returning_object_list() 实际上确实返回一个列表,那么 object.get_param 是不是有点奇怪的物体?如果没有变量类型,您如何通过命名约定来避免这种困惑?

希望我说得清楚。

最佳答案

这可能主要是一个基于意见的问题,但我会尝试回答。

无论使用哪种语言,好的变量名总是有帮助的。如果您有一个带有名称的函数,例如 get_data,您无法真正推断出该数据是单个对象还是列表或其他什么。但是,如果您有一个 class Bunny 和一些名为 get_bunnies 的函数,则可以安全地假设它将返回某种集合。当然,总是存在一个问题,例如集合是 list 还是 dict

但是如果你只是阅读这样的代码,你可以很快推断出如果它与关键字一起使用,它是一个dict,或者它的某种派生。

Duck Typing的目的简而言之,“如果它像鸭子一样走路,像鸭子一样游泳,像鸭子一样嘎嘎叫,那么它可能就是一只鸭子”。这意味着即使 get_bunnies 返回 dict 的一些奇特子类,您也应该能够像使用它实际上是 dict 一样使用它,只要因为它实现了正确的 __dunder__-方法。

鸭子类型当然总是会带来一些强类型不会带来的问题,但这通常只是一个约定问题。如果您不确定某个函数将返回什么,您可以随时测试它:在您的代码中、在解释器中甚至查找源代码。

关于命名变量的“匈牙利表示法”,如 strNamename_string...我一直同意 Robert C. Martin 的观点,即它给变量名带来了不必要的冗余。当然,动态类型的冗余并没有那么糟糕,但即便如此,我也不喜欢它。当阅读代码和搜索代码时,它往往会让事情变得更加困难。甚至更重要的是,当变量类型更改而不更改名称时......

如果您既没有可用的示例代码也没有良好的命名,您将需要查找源代码,或者希望函数定义中包含文档字符串。如果您很幸运并且文档字符串已定义并且是最新的,那么一个好的 IDE 将帮助您解析该字符串,甚至是函数的整个定义,而无需查找源文件自己看。

关于python - 当编写/阅读 python 代码时,人们如何判断变量是否是对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41179087/

相关文章:

python - Python中标签二值化的逆过程

Android - View 未正确对齐

java - 将 BitSet 设置为原始类型?

数据库列命名

r - 哪些 1-2 字母对象名称与现有 R 对象冲突?

c# - 关于成员变量的 C# 命名约定

python - 了解 gpu 使用 huggingface 分类 - 总优化步骤

python - 通过在每个大写字母前添加一个空格来格式化字符串

python插入字符串中间

javascript - ngModel的深层对象创建机制