【8】Python3之面向对象

1、面向对象基本概念

 3、类的概念

对象如何产生?又是如何规定对象的属性和方法呢?

答:在Python中,采用类(class)来生产对象,用类来规定对象的属性和方法!也就是说,在Python中,要想得到对象,必须先有类!

为什么要引入类的概念? 类本来就是对现实世界的一种模拟,在现实生活中,任何一个实体都有一个类别,类就是具有相同或相似属性和动作的一组实体的集合!

所以,在Python中,对象是指现实中的一个具体的实体,而既然现实中的实体都有一个类别,所以,OOP中的对象也都应该有一个类!

一个对象的所有应该具有特征特性信息,都是由其所属的类来决定的,但是每个对象又可以具有不同的特征特性信息,

比如,我自己(人类)这个对象,名字叫老王,性别男,会写代码,会教书;另一个对象(人类)可能叫赵薇,性别女,会演戏,会唱歌!

 

 

创建类

使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:

class ClassName:
   '类的帮助信息'   #类文档字符串
   class_suite  #类体由类成员,方法,数据属性组成。

5、类的实例化(创建对象)

类的实例化就是通过类得到对象!

 

6、self   在类中,有一个特殊关键字self,其指向类实例化对象本身。

 1、什么是属性

属性即是特征,比如:人的姓名、年龄、身高、体重…都是对象的属性。

对象属性既可以在类外面添加和获取,也能在类里面添加和获取。

3、类外面获取对象属性

 

_init__()方法:是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
self代表的是类的实例,代表当前对象的地址,而self._XXXXX则指向类。

 面向对象的三大特性

1、封装、继承、多态

① 封装: 将属性和方法书写到类的里面的操作即为封装,封装可以为属性和方法添加私有权限。

② 继承: 子类默认继承父类的所有属性和方法,与此同时子类也可以重写父类属性和方法。

③ 多态: 多态是同一类事物具有的多种形态。不同的对象调用同一个接口(方法),表现出不同的状态,称为多态。

类的继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。

类是用来描述现实世界中同一组事务的共有特性的抽象模型,但是类也有上下级和范围之分,

比如:生物 => 动物 => 哺乳动物 => 灵长型动物 => 人类 => 黄种人

从哲学上说,就是共性与个性之间的关系,比如:白马和马!所以,我们在OOP代码中,也一样要体现出类与类之间的共性与个性关系,

这里就需要通过类的继承来体现。简单来说,如果一个类A使用了另一个类B的成员(属性和方法),我们就可以说A类继承了B类,

同时这也体现了OOP中代码重用的特性!

通过继承创建的新类称为子类派生类,被继承的类称为基类父类超类

继承语法

方法重写

重写也叫作覆盖,就是当子类成员与父类成员名字相同的时候,从父类继承下来的成员会重新定义!

此时,通过子类实例化出来的对象访问相关成员的时候,真正其作用的是子类中定义的成员!

上面单继承例子中 Animal 的子类 Cat和Dog 继承了父类的属性和方法,但是我们狗类Dog 有自己的叫声'汪汪叫',

猫类 Cat 有自己的叫声 '喵喵叫' ,这时我们需要对父类的 call() 方法进行重构。如下:

 

类方法的调用顺序,当我们在子类中重构父类的方法后,Cat子类的实例先会在自己的类 Cat 中查找该方法,

当找不到该方法时才会去父类 Animal 中查找对应的方法。

 调用父类属性和方法:super():调用父类属性或方法,完整写法:super(当前类名, self).属性或方法()

 多继承:一个类同时继承了多个父类,并且同时具有所有父类的属性和方法例如:孩子会继承父亲 和 母亲的方法。

 多态指的是一类事物有多种形态

多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果

① 多态依赖继承

② 子类方法必须要重写父类方法

 

 面向对象的其他特性

 1、私有属性和私有方法

在Python中,可以为实例属性和方法设置私有权限,即设置某个实例属性或实例方法不继承给子类。

设置私有属性和私有方法的方式非常简单:在属性名和方法名 前面 加上两个下划线 "__" 即可。

 

 私有属性和私有方法与继承的关系

在Python中,一般定义函数名' get_xx '用来获取私有属性,定义' set_xx '用来修改私有属性值。

类属性,类方法,

静态方法

在开发时,如果需要在类中封装一个方法,这个方法:

​ ① 既 不需要访问实例属性或者调用实例方法

② 也 不需要访问类属性或者调用类方法

这个时候,可以把这个方法封装成一个静态方法

 

静态方法需要用修饰器 "@staticmethod" 来标识,告诉解释器这是一个静态方法。

通过类名.调用 静态方法

 

posted @ 2023-02-01 18:05  越长大越孤单哦  阅读(89)  评论(0编辑  收藏  举报