为什么python类的私有属性允许我赋值?

Why does a private attribute of python class allow me to assign a value?

本问题已经有最佳答案,请猛点这里访问。

我有一个具有私有属性的类

1
2
3
4
5
6
7
class DoGood():
     __prv ="i m private"
     def __init__(self):
         self.default_string = self.__prv

     def say_it_aloud(self):
         print self.default_string

我正在尝试从python cli访问private属性

1
2
3
4
5
6
>>> from sample import DoGood
>>> obj = DoGood()
>>> obj.__prv
Traceback (most recent call last):
 File"<stdin>", line 1, in <module>
AttributeError: DoGood instance has no attribute '__pro'

因为它是私有的,所以我不能访问它,但是当我试图分配一个值时,我可以访问它。

1
2
3
>>> obj.__prv ="changed in subclass"
>>> obj.say_it_aloud()
i m private

但是,类对象中的值没有更改。但是为什么我能分配它呢?它有任何用途吗?


您正在为为为该类创建的实例分配一个新属性。它不会更改uu prv属性的值。

1
print DoGood._DoGood__prv # access a private attribute.

仍会输出"我是私人的"