类的整理

对象是特征与技能的结合体

类是一系列对象相同的特征和技能的结合体

如何定义类

首先定义类,后调用类创造对象

定义类的语法

class 类名:
 对象相同的特征
 对象相同的技能
class 用来定义类的,class后跟类名

注意:类名必须要遵循驼峰命名法

在定义类发生的事情

  1. 类在定义时,会产生一个空的名称空间

  2. 会把类内部所有名字,扔进类的名称空间

    注意: 类在定义阶段就已经产生好了名称空间

    执行python文件时会执行类内部的代码

类名会指向类的名称空间

类“.”特征或技能的方式对类内部的变量值进行修改

“.”会指向类内部的名称空间,从而获取变量值

类的操作有

增、删、改、查

对象

如何产生对象:

语法:

​ 类名() 调用类产生对象

名称空间的产生

  1. 类的名称空间在类定义阶段就已经产生了
  2. 对象的名称空间,在调用类时产生

__init__魔法函数在调用类时,自动触发该函数

给对象添加属性的方式

self.name = x

stu1.age = 10

查看名称空间

__dict__

对象与类的查找顺序

  1. 对象.属性,若对象本身有,则优先查找对象自己的
  2. 若对象没有,则取类里面找,若类没有,则报错

对象绑定方法的特殊之处

类内部函数主要是给对象用的

  1. 由类来调用类内部的函数,该函数只是一个普通函数,

​ 普通函数需要接收几个参数就得传入几个参数

  1. 由对象来调用称之为绑定方法

    不同对象调用该绑定方法,则会将不同的对象传入该绑定方法中

继承

继承是一系列类相同特征和技能

继承父类的属性和方法

__bases__查找当前父类

先抽象再继承

问题复杂不好分析时先抽象再继承

在继承的背景下,对象属性的查找顺序

  1. 对象查找属性会先从对象的名称空间中查找
  2. 若对象没有,则回去类里面寻找
  3. 若当前类是子类,并且没有对象找的属性,会去父类查找

注意: 对象查找属性,若子类由,不管父类有没有,以子类的为准

派生

派生指的是子类继承父类的属性,并且派生出新的属性

子类派生出新的属性,若与父类的属性相同,则以子类的为准

子类派生出新的属性,并重用父类

父类.__init__

super().__init__

新式类与经典类

新式类继承object

经典类没有继承object

mro()

查看当前类的继承顺序

钻石继承

在多继承的情况下

经典类 深度优先

新式类 广度优先

组合

继承

类与类的关系,子类与父类的关系

组合

对象与对象的关系,一个对象拥有另外一个对象

@property

在调用是时候不用加上括号来调用可用在if判断语句中

多态与多态性

在使用不同类事物时候,使用的方法名称相同

抽象类,abc @abc

所有子类都遵循父类的方式,使用abc模块,来定死方式

鸭子类型(风格)

像多态一样工作,但是没有继承,关注对象的方法

多态炫技

由一堆相同方法的类,对类的功能抽象化后使用一个定义函数然后统一调用

访问限制

由__开头的变量或者函数变为__类名_变量名

@classmethod

  1. 对象的绑定方法
  2. 类的绑定方法

@staticmethod

非绑定方法

可以装饰类内部的方法,使该方法即不绑定给对象,也不绑定给类,变为一个普通函数

uuid

一个加密模块,uuid4随机数字,uuid1基于时间戳

__class__

对象的属性,获取该对象当前的类

isinstance

判读参数1是否属于参数2的一个实例

issubclass

判断参数1是否是参数2的子类

反射

通过字符串对对象或类的属性进行验证或操作

hasattr

判断字符串是否是对象或类的属性

getattr

获取对象或类的属性

setattr

设置对象或类的属性

delattr

删除对象或类的属性

魔法方法(类的内置方法)

__init__ 在调用类的时候触发

__str__ 会在打印对象的时候会触发

__del__对象被销毁前执行该方法,该方法会在最后执行

__getattr__ 会在对象.属性时候,属性没有的情况下才触发

__setattr__ 会在 “对象.属性 = 属性值 “时触发

__call__ 会在对象被调用的时候触发

__new__ 会在__init__ 执行前执行

单例模式

class File:
    __instance = None
    @classmethod
    def singleto(cls,file_name):
        if not cls.__instance:
            obj = cls(file_name)
            cls.__instance = obj
            return cls.__instance
posted @ 2019-10-14 00:36  小凯子+  阅读(167)  评论(0编辑  收藏  举报