权限问题

149 阅读1分钟

私有属性:

>>> 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、如果非要修改数据,通过方法传进去,通过方法让外部可以访问。