在Python中创建一个私有变量

时间:2014-11-24 09:20:17

标签: python class variables private

我正在学习如何上课,而我正在尝试完成我的一项任务,但我很难将变量变为私有。我正在创建一个账户类,用于存储ID,余额和年利率。所有这些都有默认值或可以设置。我的代码看起来像这样

class Account:
def __init__(self, ID=0, balance=100, annualInterestRate=0.0):
    self.ID = int(ID)
    self.balance = float(balance)
    self.annualInterestRate = float(annualInterestRate)
account = Account()
print(account.ID)
print(account.balance)
print(account.annualInterestRate)   

一切正常,但是如果我尝试将变量设为私有(通过在变量之前添加“__”),然后尝试访问值,我会得到一个AttributeError。谁知道我做错了什么?

    ... 
    self.__ID = int(ID)
    self.__balance = float(balance)
    self.__annualInterestRate = float(annualInterestRate)
account = Account()
print(account.ID)
print(account.balance)
print(account.annualInterestRate)   

1 个答案:

答案 0 :(得分:1)

>>> class Foo:
...     def __init__(self, value):
...         self.__value = value
...
>>> foo = Foo(42)
>>> print(foo.value)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'value'
  

你改了名字,你为什么期望旧名继续工作? - RemcoGerlich

我认为你的意思是:

>>> print(foo.__value)

但它也不起作用:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute '__value'

最后:

>>> print(foo._Foo__value)
42
  

由于name mangling。 - 马辛