目录
初识封装
广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种
只让自己的对象调用自己类中的方法
狭义上的封装 ———— 面向对象的三大特性之一
属性和方法都藏起来 不让你看见
一、 什么是封装?
面向对象编程有三个特点:封装、继承和多态。最重要的特征之一是封装。
封装:指数据和功能的集成
它分两个步骤实现:隐藏接口和开放接口
二、隐藏属性
Python的类机制通过以双下划线开始隐藏属性(设置为私有),但实际上,这只是一个变形操作。在类定义阶段,当检测到语法时,类中以双滑动线开头的所有属性将自动变为“_类名_属性名”:
三、鸭子类型
也就是说,在鸭子类型中,关注点在于对象的行为,能作什么;而不是关注对象所属的类型。
四、封装和@property
先来看一段代码
@property的作用:当您希望获得只能通过计算属性获得的值,并且希望通过访问数据属性(P1.h=1.69)来访问该值时,可以向该函数(函数)添加属性,使其成为数据属性
from math import pi class Circle: def __init__(self,r): self.r = r @property def C(self): return 2*pi*self.r @property def S(self): return self.r**2*pi c1 = Circle(5) print(c1.C) #圆的周长 print(c1.S) #圆的面积
通过上面的栗子我们大概了解了封装的概念,那么再来看下面这段栗子
class Goods: discount = 0.5 def __init__(self,name,price): self.name = name self.__price = price @property def Price(self): return self.__price * Goods.discount apple = Goods('苹果',5) print(apple.Price)
我们可以向调用属性一样,调用函数方法Price来改变Goods类中discount属性了
五、小结
所有的私有 都是在变量的左边加上双下换线
对象的私有属性
类中的私有方法
类中的静态私有属性
所有的私有的 都不能在类的外部使用
在其他语言中有public protect private
且Python中没有protect
封装 ———— 私有的
在Python中只要__名字,就把这个名字私有化了
私有化了之后 就不能从类的外部直接调用了
静态属性 方法 对象属性 都可以私有化
这种私有化只是从代码级别做了变形,并没有真的约束
变形机制_类名__名字 在类的外面用这个调用,在类的内部直接用__名字调用