我有下面的代码
class AccountBannk:
def __init__(self,balance,holder):
self.__AccountHolder=holder
def Display_AccountHolder(self):
print "account holder is" , self.__AccountHolder
myaccount=AccountBannk(100000,"mehdiebagvand")
#print myaccount.__AccountHolder #is a error
myaccount.__AccountHolder="ali"
print myaccount.__AccountHolder #print ali
在这段代码中AccountHolder是一个私有(private)属性
在 python 中我们不能直接编辑或打印它。
如果我们尝试下面的代码,python 会释放一个错误
print myaccount.__AccountHolder
但我的问题是
1-为什么python不在下面的代码中释放错误
myaccount.__AccountHolder="ali"
2-我在 end_line 中打印 myaccount.__AccountHolder 但 python 未释放错误
并将 myaccount.__AccountHolder 的值更改为 'ali'
最佳答案
这不是错误。当你在你的类中定义你的第一个 __AccountHolder
时,Python 会破坏变量的名称(使其难以猜测,但不是真正的私有(private),参见 PEP-8 )。当您附加第二个 __AccountHolder
时,您正在创建一个新变量(具有新的错位名称)。试试看:
print myaccount.__AccountHolder
print myaccount.Display_AccountHolder()
或添加
print dir(myaccount)
像这样进行第二次作业之前和之后:
>>> myaccount=AccountBannk(100000,"mehdiebagvand")
>>> dir(myaccount)
['Display_AccountHolder', '_AccountBannk__AccountHolder', '__doc__', '__init__', '__module__']
>>> myaccount.__AccountHolder="ali"
>>> dir(myaccount)
['Display_AccountHolder', '_AccountBannk__AccountHolder', '__AccountHolder', '__doc__', '__init__', '__module__']
至于名称修改,这里是来自文档:
__double_leading_underscore: when naming a class attribute, invokes name mangling (inside class FooBar, __boo becomes FooBar_boo; see below).
关于python - python private-attribute_class 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487287/