奇怪的私有变量

奇怪的私有变量

class book:
    __hi=1

a=book()
print a.__hi

是错的. 运行说不行

但:

class book:
    __hi=1

a=book()
a.__hi=2
print a.__hi

就打印2. 那私有变量就废了?
kongds@kongds-desktop:~$ python
Python 2.5.1 (r251:54863, Mar  7 2008, 04:10:12)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> dir()
['__builtins__', '__doc__', '__name__']
>>> class book():
...     x = 1
...
>>> a = book()
>>> print a.x
1
>>>
class book:
    __hi=1
test=book()
print test._book__hi


QUOTE:
原帖由 3227049 于 2008-3-26 23:33 发表
class book:
    __hi=1
test=book()
print test._book__hi

没报错啊
本来就没错啊,私有变量本来就应该通过setter,getter这样的类方法进行操作
类内部__x会被重命名为_classname_x,而通过类实例设置
x=someclass()
x.__z=1
__z只是__开头的public变量
class book:
    __hi=1   ->self.__hi=1

a=book()
print a.__hi