3 回答
TA贡献1862条经验 获得超7个赞
将double __属性更改为_ClassName__method_name,使其比隐含的语义隐私更加私有_method_name。
如果您确实愿意,从技术上讲您仍然可以使用它,但是大概没人会这样做,因此出于维护代码抽象的原因,该方法在那时也可能是私有的。
class Parent(object):
def _protected(self):
pass
def __private(self):
print("Is it really private?")
class Child(Parent):
def foo(self):
self._protected()
def bar(self):
self.__private()
c = Child()
c._Parent__private()
这具有允许方法不与子类方法名称冲突的其他好处(或有人说主要的好处)。
TA贡献1877条经验 获得超6个赞
另外PEP8说
仅对非公共方法和实例变量使用前导下划线。
为避免名称与子类冲突,请使用两个前导下划线来调用Python的名称处理规则。
Python将这些名称与类名称混为一谈:如果class Foo具有名为的属性__a,则不能通过进行访问Foo.__a。(坚持的用户仍然可以通过调用获得访问权限Foo._Foo__a。)通常,双引号下划线仅应用于避免名称与设计为子类的类中的属性发生冲突。
_such_methods按照惯例,您也应该远离。我的意思是你应该把他们当成private
添加回答
举报