Tom*_*ker 4 python oop encapsulation private
几周前,我完成了 Python 的技术测试。虽然测试的总体反馈非常积极,但我在反馈中看到的令我惊讶的一件事是:
\n\n\n没有封装 \xe2\x80\x93 大量的 public_functions 应该是 _private_functions
\n
这让我感到惊讶,因为根据我作为 Python 开发人员两年来在脑海中建立的模糊画面,我们实际上并没有在 Python 中执行私有方法或函数。我们所拥有的只是惯例、速记和君子协定的拼凑而成。但我脑海中的那个画面是正确的吗?
\n因此,我更深入地研究了这个问题,查阅了标准 Python 文档以及PEP 8,并得出了以下结论:
\n__spam被解释为_classname__spam. 这可以用来模拟一种粗略的隐私,这样如果有人尝试__spam从类之外调用,就会引发异常。_single_leading_underscore时不会导入from M import *,但我找不到其他任何内容。然而,这只是告诉我我可以做什么,而不是我应该做什么。
\n我是否可以将上述反馈视为来自可能将其职业生涯花在 Java/C#/etc 编程上的人,因此在使用 Python 进行封装时没有正确的心态?或者我应该重新思考编写 Python 程序的方式,以便任何封装都更加明确?
\n从技术角度来看,编写代码的方式没有正确或错误之分。计算机关心的是指令和数据。无论你是否使用类,如果你的代码是模块化的还是意大利面条式的,你的函数的名称是什么,它们是公共的还是私有的等等——当它到达 CPU 时,一切都会付诸东流。
像这样的争论是关于观点的争论。每个人都有意见。你也可以称之为味道。具有相似观点的人们聚集在一起,创建组织、政党、机构等来宣传他们的想法。他们声称,以某种方式可以概括和提炼软件的编写方式,从而得出“正确”或“错误”的决策。
然而,对于每一条证明某事的规则,你很快就会发现另一个与之相矛盾的规则。这就是自然法则——现实无国界。这就是一切混乱的原因。
对于某件事,不存在、也永远不会存在普遍规则。这将与宇宙的本质相矛盾:时间和熵。无论你问什么问题,答案总是“视情况而定”。
经过 40 年的编程生涯,我的核心价值观如下: