禁止随意设置属性
需求
考虑这样一种情况,在某一个类中,有一个属性我们不希望别人随便设置,因为这可能会造成很大的麻烦:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_area(self):
return self.width * self.height
r = Rectangle(3, 4)
print(r.calculate_area())
在这种情况下,长度和宽度都应该是数字类型的,而如果有人在这个过程中修改了这个属性,那么就会导致错误。
r = Rectangle(3, 4)
r.width = "3"
print(r.calculate_area()) # 结果为3333,明显不是我们希望的结果
私有属性
为了避免他人随意访问,我们可以将其设置为私有属性,通常可以添加1个或者2个下划线。
class Rectangle:
def __init__(self, width, height):
# 一个下划线通常表明了,这个属性不应该随意使用,但是不起实际作用
self._width = width
# 两个下划线表明了,这个属性会触发名称重整,但是也并非真正的私有
self.__height = height
r = Rectangle(3, 4)
print(r._width)
# 双下划线最终会重整为_类名__属性名的形式
print(r._Rectangle__height)
需要注意的