我正在学习如何上课,而我正在尝试完成我的一项任务,但我很难将变量变为私有。我正在创建一个账户类,用于存储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)
答案 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。 - 马辛