类的总复习

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

如何定义类

先抽象,抽取对象之间相同的特征与技能

再定义,

定义类时会发生那些事情

1.会产生一个类的名称空间

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

注意:定义类时,就会执行类内部的代码,若语法不正确,则会报错

如何产生对象

调用类会产生一个对象,调用类的过程称之为类的实例化,对象称之为类的一个实例

调用类时发生的事情

1.调用类时会产生一个对象的名称空间

2.会触发__init__,接着把对象与括号内所有的参数都传给__init__(),对象当作第一个参数

3.在__init__内部没有,可以给对象添加属性

对象的名字查找

1先找对象自己有没有,

2.没有就去类中找

3.若此类是子类,会去父类中查找。

对象的绑定方法

类来调用,类内部的方法只是普通的函数,函数需要几个参数,就传入几个参数。

由对象由来调用,会自动把对象当作第一个参数传入该方法。

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

一切皆对象

在python中,一切皆对象

python八大数据类型

list, tuple, set, dict, float, int, bool, str

内置函数:filter

继承

继承指的是新建类的方式,新建的类指的是子类或派生类,子类可以继承一个父类,父类又可以称之为基类或超类

如何查找继承关系

必须 ”先抽象,再继承“

抽象:抽取相似的部分

—先抽象:抽取类与类之间相同的特征与技能

—再继承:确定好子类与父类,定义父类,父类中写类与类之间相同的特征与技能,子类继承父类的属性

继承关系

类是对象与对象之间的关系,类是一系列对象相同的特征与技能的结合体

继承是类与类之间的关系,子类与父类是一种从属关系

派生

派生指的是子类继承父类的属性,并派生出自己的属性

子类可以派生出自己的属性,并重用父类的属性

1.__init__直接调用类,类名.属性的方式冲重用父类的属性

2.super(),super().指向父类的名称空间,重用父类的属性

注意:子类派生出与父类相同的属性,以子类为主

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

1.先在对象中查找

2.对象中没有,在类中查找

3.类中没有,若类为子类,会在父类中查找

4.对象查找属性,若子类有,不管父类有没有,以子类为准

新式类与经典类

新式类:继承object的类

经典类:在python2中没有继承object的类

钻石继承(菱形继承)

新式类:广度优先

经典类:深度优先

组合

组合指的是一个对象的属性是另一个对象

组合的作用:与继承一样,解决代码冗余问问题

继承的优点:编写的复杂程度没有组合高

继承的缺点:耦合度太高,可扩展性差

组合的优点:可以让类与类之间耦合,可扩展性高

组合的缺点:编写复杂程度高于继承

封装

封装指的是把一堆属性,封装到对象中,对象就好比一个袋子,或一个容器

优点:方便数据的存取,可以通过 对象.属性 的方法获取数据

封装是面向对象的核心

访问限制机制

在类内部,凡是以__开头的属性,都会被隐藏,实际是变形成为 __类名__ 属性

好处:可以对一些重要的数据进行隐藏,不轻易被直接调用,保证数据的安全,比如与金钱,用户信息相关的操作

property

python的内置的装饰器,主要给类内部的方法使用,使用他的目的是将类内部的方法(def方法名)变成了(def方法)

注意:不能对被装饰过的方法属性修改

多态

同一种事物的多种形态

多态的目的:是为了统一代码的编写规范

多态的实现方式:

继承:子类继承父类的特征

抽象类:

1.导入一个abc模块

2.让父类继承一个(metaclass=abc.ABCMeta)

3.给类内部所有方法加上一个@abc.abstractmethod

子类继承抽象类,强制让子类继承父类的方法,缺一不可

鸭子类型:

只要你长得像鸭子,并且行为与鸭子一摸一样,呢么你就是鸭子

同一种事物的类,都有相同的功能,该这些类都在内部定义相同名称的方法

classmethod

是一个方法,用来装饰在类内部的方法,可以让该方法变成类的绑定方法

对象的绑定方法:由对象来调用,会将对象当作第一个参数传入该方法,不同的对象调用该方法,则会将不同的对象传入到该绑定方法中

类的绑定方法:由类来调用,会将类当作第一个参数传入该方法。

staticmethod

是一个装饰器,可以装饰类内部的方法,使该方法既不绑定给对象,也不绑定给类,谁都可以调用,并且没有自动传值的效果

简而言之,非绑定方法就是将普通方法放到类中使用

面向对象高级

isinstance

判断一个对象是不是另一个类的实例

issubclass

判断一个类是不是另一个类的子类

反射

反射:通过字符串操作对象或类的属性

hasattr:通过字符串,判断字符串是否是一个对象或类的属性

getattr:通过字符串,获取对象的属性

setattr:通过字符串,设置对象的属性

delattr:通过字符串删除一个对象或类的属性

魔法方法

__new__   会在__init__执行前触发

__init__   会在类被调用的时候触发
    
__str__    会在打印的时候触发

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

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

__del__   会在对象被注销前执行,该方法会在最后执行
 
__call__    会在对象被调用的时候触发
posted @ 2019-10-14 21:29  余人。  阅读(126)  评论(0编辑  收藏  举报