Python面向对象

面向对象三大特性

实例化一个类需要经过步骤

  1. python 调用内置的type类
  2. 然后type调用内置的元类mateClass
  3. mateClass再调用__new__方法将类实例化,此时完成了第一步
  4. 这个实例将会初始化自己的类变量,就是把自己从头到尾扫视一遍,
  5. 进入构造方法,并初始化自己的实例变量。

封装

概念:隐藏对象的属性和实现细节,仅对外提供公共的访问方式。

实现方式:双下划线

目的:代码私有化,不让外部调用和继承

私有化特征

  1. 类外部不能直接调用,无论属性还是方法。
  2. 私有属性(方法)在空间会自动命名为 _类名__属性名(方法名) (ps:在原有私有属性名前加了 _类名)
  3. 继承的时候可根据需求,当不需要子类继承时可私有化属性方法

三个装饰器的使用

  1. property:可将类的方法伪装成属性

    @property
    def name(self):
    	return self.__name
    
    @name.setter
    def name(self,val):
    	self.__name = val
    
  2. classmethod:将实例方法变成类方法

    # 原实例方法调用方式
    test = Solution()
    test.func()
    # 类方法调用方式
    Solution.func()
    
  3. staticmethod:将方法定义为静态方法,或者说是外部方法。

  4. 继承

目的:着重于补充和派生,减少类与类之间的代码冗余。

继承方式

  1. 单继承:父类只有一个
  2. 多继承:父类有多个,super()在多继承中找父类是根据子节点所在图的mro顺序寻找下一个类。遵循广度优先算法。

派生:对于被继承的类来说,这是继承父类的属性和方法,对新建类创建新的属性和方法,这是一种派生。

空间问题

对象会先从当前类中寻找属性,如果没有再根据继承的mro去父类中寻找。

Object

就算没有继承关系,都会默认继承Object。初始化时会调用Object类中init()方法

  1. 多态

多态是面向对象的设计原则,现在有三种基本设计原则

  1. 开放封闭原则:
    开放是指继承时允许在父类源代码上拓展添加功能---------装饰器。
    封闭是指不可以对源代码进行修改

  2. 依赖倒置原则:
    高层模块不应该依赖底层模块,二者都应该依赖抽象;抽象模块不应该依赖细节,细节应该依赖抽象。
    换言之,应该针对接口编程,而不是针对现实编程。
    举个错误例子
    鹦鹉类继承的动物类,鹦鹉类要实现说人话这一个方式,但是动物并没有这个方法,然后我们就去修改动物类
    正确的方法是在鹦鹉层和动物层之间加一个抽象层(拟人动物),让这个抽象继承动物层,鹦鹉层继承这个抽象层。
    简单来说,不要改源码!遇到不能实现的就在加一层模型。

  3. 接口隔离原则
    概念:接口提取了一群类共同的函数,可以把这个类看成是函数的集合。然后让子类去实现。这样做的意义在于归一化。其实就是java的interface
    归一化:让使用不需要关心对象里面是什么,只需要知道这些对象的功能是什么就行了。

鸭子类型

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

我们不关心这个对象的类型是什么,只要它满足该有的行为就行了。

posted @ 2019-09-29 10:14  小夏02  阅读(98)  评论(0)    收藏  举报