这几天把面向对象的封装、继承和多态都看了下,感觉理解的更深刻了。但是对一些概念还是不太清楚用途,比如python和其他很多种编程语言中,面向对象编程都有一个私有属性和私有方法的概念。我搜索了下python中设置私有属性的作用:
在Python中,私有属性是一种封装,它阻止了类外部直接访问属性,只能通过类提供的公共方法进行访问和修改。这样做可以帮助我们更好地控制对象状态的一致性和复杂性,确保对象的私有属性状态在操作过程中保持合理。
私有属性的设置通常是通过在属性名前面加上双下划线实现的。例如:
class MyClass:
def __init__(self, value):
self.__private_attr = value
def get_private_attr(self):
return self.__private_attr
def set_private_attr(self, value):
self.__private_attr = value
在这个例子中,__private_attr 是一个私有属性,它不能直接从类的外部被访问。为了访问它,我们必须通过 get_private_attr 和 set_private_attr 方法,这两个方法提供了对私有属性的访问和修改接口。
私有属性的另一个作用是防止子类继承和修改父类的实现细节。如果不希望子类重写父类的某些方法,也可以将这些方法视为操作私有属性的方法,从而保护数据的一致性。
通过以上描述,可以看到面向对象的私有属性或者私有方法其实有两个方面的作用,第一个就是起到封装的作用,让对象不能直接操作类的私有属性或者方法,只能通过类提供的方法(相当于外部接口)来访问。第二个作用就是不让子类继承相关的属性或者方法。
一个网友说:“私有私有,就是爸爸的私有财产儿子不能直接用,但是爸爸可以开张卡给儿子。”这个类比还是很形象的,不过要理解全面深刻只看这个类比还是不够。比如类里提供了一个接口去修改私有属性,但是能对对象提交过来的数据进行过滤,如果数据不满足要求,则不能修改私有属性。这体现了私有封装的特征,只提供接口,权限还是要由本类来控制。
网友说:“为了保护一些特殊的属性,比如需要全局统一的东西”。