在使用Python koans时,我遇到了名字错误。 koan解释说,存在名称修改以避免子类化时的名称冲突问题。公案如下:
class Dog(object):
def name(self):
return "Fido"
def __password(self):
return 'password'
def test_double_underscore_attribute_prefixes_cause_name_mangling(self):
"""Attributes names that start with a double underscore get
mangled when an instance is created."""
rover = self.Dog()
try:
#This may not be possible...
password = rover.__password()
except Exception as ex:
self.assertEqual('AttributeError', ex.__class__.__name__)
# But this still is!
self.assertEqual('password', rover._Dog__password())
我不明白为什么漫游者.__密码()是不可能的。我假设它是因为有一个名字冲突。但是冲突在哪里?我只为__password()
看到一个rover
。任何人都可以提供一个更明确的例子,说明何时需要进行名称修改?