2009-07-21 71 views
10

Python为类方法和属性提供private name mangling私人名称在Python中改名的好处是什么?

是否存在需要此功能的具体情况,还是仅仅是Java和C++的结转?

请描述一个用例,如果有的话,应该使用Python名称mangling?

此外,我不关心作者仅仅是试图防止意外的外部属性访问的情况。我相信这个用例不符合Python编程模型。

回答

0

这个名字是为了防止意外的外部属性访问。大多数情况下,它确保没有名称冲突。

+0

我在原来的问题提到了这一点。你是说你不同意? – cmcginty 2009-07-21 23:47:21

+0

我在说这就是原因。所以你不会在你的子类中意外地发生名字冲突。 – 2009-07-22 11:12:53

23

这部分是为了防止意外内部属性访问。这里有一个例子:

在你的代码,这是一个图书馆:

class YourClass: 
    def __init__(self): 
     self.__thing = 1   # Your private member, not part of your API 

在我的代码,其中我是从你的库类继承:

class MyClass(YourClass): 
    def __init__(self): 
     # ... 
     self.__thing = "My thing" # My private member; the name is a coincidence 

没有私人名字改编,我的意外重复使用你的名字将会破坏你的图书馆。

16

PEP 8

如果你的类是为了被继承,你有你不想子类使用,可以考虑用双下划线开头命名它们的属性和没有尾随下划线。这将调用Python的名称修改算法,其中该类的名称被修改为属性名称。 这有助于避免属性名称冲突,如果子类无意中包含具有相同名称的属性。

(强调)

相关问题