Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“受保护”;Python中的访问-如何?_Python_Inheritance_Python 3.x_Protected - Fatal编程技术网

&引用;“受保护”;Python中的访问-如何?

&引用;“受保护”;Python中的访问-如何?,python,inheritance,python-3.x,protected,Python,Inheritance,Python 3.x,Protected,我想在Python3.2中设置一个具有“protected”访问权限的类层次结构:基类的成员将只在派生类的范围内,而不在“public”的范围内 双下划线表示成员为“私有”,单下划线表示警告,但该成员仍为“公共”。指定“受保护”成员的正确语法是什么(如果有的话…)。Python中的成员访问许可是通过“协商”和“条约”工作的,而不是通过强制 换句话说,你的类的用户应该把不属于他们业务的东西放在一边,但是你不能强制执行,除非我使用\u xxx标识符来明确他们的访问权限(通常)不合适。双下划线在C++

我想在Python3.2中设置一个具有“protected”访问权限的类层次结构:基类的成员将只在派生类的范围内,而不在“public”的范围内


双下划线表示成员为“私有”,单下划线表示警告,但该成员仍为“公共”。指定“受保护”成员的正确语法是什么(如果有的话…)。

Python中的成员访问许可是通过“协商”和“条约”工作的,而不是通过强制


换句话说,你的类的用户应该把不属于他们业务的东西放在一边,但是你不能强制执行,除非我使用
\u xxx
标识符来明确他们的访问权限(通常)不合适。

双下划线在C++或java感测中不让成员“私有”- Python完全避开了那种语言强制访问规则。按照惯例,一个下划线将属性或方法标记为“实现细节”——也就是说,外部的东西仍然可以访问它,但这不是类接口的受支持部分,因此,类可能对不变量或前后兼容的保证不再适用。这以不同的方式解决了与“私有”(接口和实现分离)相同的概念问题

双下划线调用仍然不是“私有”的名称混乱-它只是上面的一个稍微强一点的表述,其中: -此函数是此类的一个实现细节,但是 -子类可以合理地期望有一个名称相同的方法,而不是原始方法的重写版本

这需要一点语言支持,即
\uu name
被破坏,以包含类的名称-因此它的子类版本获得不同的名称,而不是重写。如果子类或外部代码真的想调用该方法,那么它仍然很有可能调用该方法,而名称混乱的目标并不是明确地阻止它


但正因为如此,“protected”在Python中并没有多大意义——如果您真的有一个方法可以打破不变量,除非由子类调用(实际上,即使您认为这样做了,也可能没有),Python的方法就是将其记录下来。在docstring中添加一条注释,大意是“假定这只由子类调用”,并假定客户机会做正确的事情,因为如果他们不这样做,这将成为他们自己的问题。

没有人可以做。使用<代码> SynLyl下划线< /Cord>约定并快乐。“双下划线不会使C++中的成员‘私有’或‘java感’……”明白。这就是为什么引用“私人”一词的原因。但是谢谢你的复习,所以这是不可能的。好啊但我确实对“条约”而不是“武力”有一个问题,我已经多次表示过:访问说明符背后的想法并不是真正阻止其他人做一些有意义的事情。它是关于代码的清晰、结构化组织。我希望我的语言能帮助我做到这一点,而不是为各种疯狂的黑客留下机会,这些在我经常看到的Python代码中都很常见。(表示我可能不应该使用Python…)