封装

封装

1、概念:

  --对外部隐藏内部的属性,以及实现细节,给外部提供使用的接口

学习封装的目的是为了能够限制外界对内部的数据访问

在python中属性的权限分为两种(默认为公开的)

  --1、公开的

      没有任何限制,谁都能访问到,并且可以修改

  --2、私有的

      只有当前类本身能够访问,并且修改

2、优点:

封装主要封装的是类中的数据,类中的数据分为两种:属性和方法

  --1、提高安全度

      封装属性(通过方法访问被封装的属性叫访问器,修改属性叫设置器)

  --2、隔离复杂度

      封装方法(一个为内部提供支持的方法,不应该让外界直接访问,就直接封装起来)

3、封装原理:

  --1、python封装的原理就是变形,就是把__开头的名字变形为_类名__名字

  --2、所以也可以直接使用变形之后的名字直接访问属性,但通常没必要这么做

  --3、变形只会发生一次,就是在类的定义阶段,后续再添加的双下划线开头的名字不会产生变形

4、装饰器property:

  作用:把一个方法伪装成属性

  原因:为了把访问私有属性的方式变得和访问公有属性一样,可以直接点出来而不用带括号

class Student:
    def __init__(self,name,age):
        self.name = name
        self.__age = age
    
    @property           # 这样就可以直接通过stu.age访问私有属性了
    def age(self):
        return self.__age
stu = Student('faker',20)

  与property相关的两个装饰器:

    1、setter:如果property装饰了一个函数,可以通过函数名.setter来把方法伪装成修改公有属性的方式,

          直接在外界赋值就相当于调用这个方法

    2、deleter:如果property装饰了一个函数,可以通过函数名.deleter来把方法伪装成共有属性删除属性的方式,

          直接在外界del属性名就相当于调用这个方法

5、计算属性(用到的也是property装饰器)

  有些属性它不是固定的,它是通过某些值计算得来的,是一个不稳定的值,这样我们就需要通过对属性的计算得到新的属性,并且把这个新的属性调用方式变成和那些固定的方法一样,例如人的健康指数BMI

多态

1、定义:

  多态指的是多个不同类型对象可以响应同一个方法,并且产生不同的结果

2、优点:

  只需要学习基类中的使用方法即可,不需要关心具体哪一个类 怎么实现的,以不变应万变,提高拓展性

3、如何实现:

  可以通过接口、抽象类来实现,python最崇尚的是鸭子类型

常用内置函数

1、__str__:

  执行条件: 当对象被转换成字符串时,会自动执行该函数下的内容

  使用场景: print过程中有转换str的步骤,所以可以根据这个函数的特性

  自定义一些打印格式

2、__del__:  析构函数

  执行条件 : 当对象被删除前,会自动执行该函数

  使用场景:

    当你的对象在创建时,开启了不属于解释器的资源,例如打开了一个文件

    必须保证当对象被删除时,同时关闭额外的资源

  总结: __del__该函数用于在对象删除前做一些清理操作

反射

1、反射定义:

  指一个对象必须具备发现自身属性,以及修改自身属性的能力

  反射就是通过字符串来操作对象属性

2、涉及到的方法:

  hasattr:判断是否存在某个属性

  getattr:获取某个属性的值

  setattr:新增或者修改某个属性

  delattr:删除某个属性的值,(必须是自己名称空间有的属性,和hasattr判断条件不一样)

hasattr、getattr、delattr用法一样都是(对象,属性的字符串)

setattr用法(对象,属性的字符串,新增或者修改的值)

动态导入模块

#1、静态导入:直接import导入     ,建立在一个基础上,提前已经知道有这个模块      ,导入方法写死的

#2、动态导入:指的是在需要的时候,通过指定字符串类型的包名来导入需要的模块

import import.lib

mk = importlib.import_module(m_name)

  m_name:包名

  mk:成功导入的模块

该方式常用在框架中,因为框架设计者不可能提前预知后续需要的模块和类,都是通过动态导入,提供需要导入的包名或模块名进行导入

原文地址:https://www.cnblogs.com/hesujian/p/10896265.html