Python不禁止调用私有/受保护的方法,因为它爱您:-)

关于python为什么是byaka的讨论,很多副本都被打破了-它不禁止调用非公共方法。 当然,本着“我们都是成年人”的精神进行的解释不止一次,但似乎还不够,我想我终于明白如何更清楚地解释这一点,我希望这是真的。

让我提醒您,对于私有方法,python仅动态更改名称,并且不以任何方式限制对它的访问,但是对于受保护的方法则不这样做,这只是方法的命名约定,对于真正不知道的人, 这里这里都有其他资料。 。

首先,您需要从一个问题开始,为什么该语言应禁止调用某些代码? 许多语言都这样做,但是并不能因此而正确,应该如此。

!= .

有哪些可能的选择?

  1. 您是代码的作者,出于某种原因,您决定在公共领域不需要这种方法,好的,您有这样的想法,但是为什么从技术上禁止这种方法? 此代码是否调用守护程序并且需要隐藏? 还是普通代码,而另一个像您这样的程序员可能正处于您甚至无法想到的情况下,并且他需要使用此代码。 还是您认为自己是超人,并且绝对知道这不可能?
  2. 您是其他人的代码的用户-通常,您对非公开方法的存在一无所知,除非您做出特殊的努力(可以记录受保护的方法,但要指明它们是什么)。 好吧,比方说,您有意识地和有目的地了解了一些非公开方法的存在并将其称为发生了什么? 大地开了,撒但和萨达姆跳了出来吗? 还是按预期工作? 我听到有人在尖叫-当然,升级过程中它可能会中断,但是由于您故意使用非公开方法,因此您了解这种风险(如果没有,那么您就不合适了)。 而且,更新不是自发的过程,就像铀原子核的衰变一样,测试环境中的所有内容都会破裂。 当然,对于某些人来说,发生更新是量子性质的,并且发生在最不可预测的地方的最不可预测的时刻,但是在那谈论一些私有方法是荒谬的,没有它们,就会有很多问题。

实际上,在所有这些论点的背后都有一个重要的,可以说是哲学的原则:“机器是愚蠢的,人是聪明的”。 即 由机器来决定什么是可能的,什么不可能是由人做出的决定。

您可以通过说代码的作者(一个人或一个理性的人)认为这是不可能的来反驳这一点,但随后另一个原则即自由和责任的原则开始发挥作用:“如果您已经与他人共享了某些东西,请不要指示他们是如何做的。我们必须使用它,他们自己应对自己的行为负责”,在这里,我们得出的结论是,我们都是成年人,对我们的行为负责。

有人会说键入是同样的限制-是的,但是只有当机器告诉一个人,哦,我很愚蠢,我不知道该怎么做-导致的原因和类型,请解释一下。

顺便说一句,有一个很好的例子,一个例子是作者决定可以使汽车变得智能,但他们没有成功-这是YAML格式,作者写了一个大规范, 似乎很少人能够实施,或者不够清晰 ,但是存在根本性问题当尝试猜测肥皂的类型(假装机器很聪明)会导致惨败时,与实现无关的信息

python世界中,有一个人对此有所了解 (并进行了详细描述)。 他的库看起来像是正确的方法-数据是人类可读的,但是对于数据,存在一个单独的,由人类编写的方案,该方案使机器不可以假装是智能的,但是可以知道什么类型,但是不幸的是,这种方法尚未成为主流。

希望我设法改善python哲学的解释并取笑其他方法)

Source: https://habr.com/ru/post/zh-CN457034/


All Articles