python - python private-attribute_class 中的错误

标签 python python-2.7

我有下面的代码

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/

相关文章:

python - 在 Eventlet 页面抓取器中维护 session ?

python - getattr 和 setattr 在嵌套子对象/链接属性上?

python - 如何在使用 Python 的 smtplib 发送的电子邮件中获取换行符?

python-2.7 - Ansible 列表未排序

python-2.7 - 在 pandas.DataFrame.to_csv 中写入多个标题行

python - 使用类的 __new__ 方法作为工厂 : __init__ gets called twice

python - 使用 GDB-Python Types API 查找嵌套结构的绝对偏移量

python - 尝试使用 opengl 函数 glMapBufferRange 在 python 中制作 alienrain

python - 有什么安全的方法可以在 MySQL 查询中参数化数据库名称吗?

python - 如何在Python中将固定长度文件转换为csv文件?