私有属性:
>>> class Student(object):
... def __init__(self, name, score):
... self.__name = name
... self.__score = score
... def print_score(self):
... print('%s: %s' % (self.__name, self.__score))
...
>>> xiaoli = Student('xiaoli', 98)
>>> xiaoli.__name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'
>>>
在属性名前加上两个下划线就把属性名变成私有的,外部无法访问到这个属性的值。
获取私有的属性值:
>>> class Student(object):
... def __init__(self, name, score):
... self.__name = name
... self.__score = score
... def get_name(self):
... return self.__name
... def get_score(self):
... return self._score
...
>>> xiaoli = Student('xiaoli', 98)
>>> xiaoli.__name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'
>>> xiaoli.get_name()
'xiaoli'
设置私有的属性值:
>>> class Student(object):
... def __init__(self, name, score):
... self.__name = name
... self.__score = score
... def get_name(self):
... return self.__name
... def get_score(self):
... return self.__score
... def set_score(self, score):
... if 0 <= score <= 100:
... self.__score = score
... else:
... raise ValueError('bad score')
...
>>> xiaoli = Student('xiaoli', 98)
>>> xiaoli.get_score()
98
>>> xiaoli.set_score(96)
>>> xiaoli.get_score()
通过这样的设置方式,可以对数据进行验证(进行判断,保证数据的安全)
总结:1、通过属性的私有化,外部就无法直接修改内部的数据。这样通过权限进行保护,代码就更加健壮 2、如果非要修改数据,通过方法传进去,通过方法让外部可以访问。