Python封装知识点

举报
努力变强的小C 发表于 2022/09/18 14:13:01 2022/09/18
【摘要】 Python封装知识点

目录

初识封装

一、 什么是封装?

二、隐藏属性

三、鸭子类型

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。