Python封装知识点

25 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

目录

初识封装

一、 什么是封装?

二、隐藏属性

三、鸭子类型

四、封装和@property

五、小结


初识封装

 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种
只让自己的对象调用自己类中的方法

    狭义上的封装 ———— 面向对象的三大特性之一
属性和方法都藏起来 不让你看见

一、 什么是封装?

面向对象编程有三个特点:封装、继承和多态。最重要的特征之一是封装。
封装:指数据和功能的集成
它分两个步骤实现:隐藏接口和开放接口

二、隐藏属性

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中只要__名字,就把这个名字私有化了
私有化了之后 就不能从类的外部直接调用了
静态属性 方法 对象属性 都可以私有化
这种私有化只是从代码级别做了变形,并没有真的约束
变形机制_类名__名字 在类的外面用这个调用,在类的内部直接用__名字调用