【Python入门自学笔记专辑】——面向对象编程

【Python入门自学笔记专辑】——面向对象编程

前言

​ 面相对象是Python的重要特性,继承了C++的类风格,在Python中的一切数据类型都是面向对象的。本章主要介绍Python的面向对象编程。


面向对象:

​ 什么是OOP(面向对象),Object Oriented Programming,原来就是面向对象的编程啊,还有OOD(面向对象的设计),OOA(面向对象的分析)。那什么是面向对象呢?要想了解这个问题我们要先了解面向过程,这样对比我们就好理解了。

很早很早以前的编程是面向过程的,比如实现一个算术运算1+1 = 2,通过这个简单的算法就可以解决问题。但是随着时代的进步,人们不满足现有的算法了,因为问题越来越复杂,不是1+1那么单纯了,比如一个班级的学生的数据分析,这样就有了对象这个概念,一切事物皆对象。将现实的事物抽象出来,注意抽象这个词是重点啊,把现实生活的事物以及关系,抽象成类,通过继承,实现,组合的方式把万事万物都给容纳了。实现了对现实世界的抽象和数学建模。这是一次飞跃性的进步。


举个最简单点的例子来区分 面向过程和面向对象:

有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择

1、自己买材料,肉,鱼香肉丝调料,蒜薹,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。

2、去饭店,张开嘴:老板!来一份鱼香肉丝!

看出来区别了吗?这就是1是面向过程,2是面向对象。

面向对象有什么优势呢?首先你不需要知道鱼香肉丝是怎么做的,降低了耦合性。如果你突然不想吃鱼香肉丝了,想吃洛阳白菜,对于1你可能不太容易了,还需要重新买菜,买调料什么的。对于2,太容易了,大喊:老板!那个鱼香肉丝换成洛阳白菜吧,提高了可维护性。总的来说就是降低耦合,提高维护性!

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。

面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。

面向过程:

优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展.

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 .
缺点:性能比面向过程差

面向对象的三大特性:

1、封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
2、继承
提高代码复用性;继承是多态的前提。
3、多态
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

参考:https://blog.csdn.net/jerry11112/article/details/79027834
https://www.jianshu.com/p/7a5b0043b035


​ 下面回到正题,有兴趣的朋友可以自己查查面向对象和面向过程,这回写笔记简单些,准确的说是字少,不能啰里啰嗦,打字费劲了🙂,笔记都可以不说人话,*o( ̄︶ ̄*)o

类和对象

定义类

语法格式如下:

class 类名[ (父类) ]:
	类体

​ 其中,class是声明类的关键字,“类名”是自定义的类名,自定义类名首先应该是合法的标识符,这个专辑博客以前有过详细解释的命名规范,“父类”声明当前类继承的父类,父类可以省略声明,表示直接继承object类。

定义动物(Animal)类代码如下:

class Animal(object):
    #类体
    pass

​ 上述代码声明了动物类,它继承了object类,object是所有类的根类,在Python中任何一个动物类都直接或间接继承object,所以(object)部分代码可以省略。


**提示:**代码的pass语句什么语句操作都不执行,用来维持程序结构的完整。有些不想编写的代码,又不想有语法错误,可以使用pass语句占位。


创建和使用对象

​ “对象”也称为“实例”。一个对象的生命周期包括三个阶段:创建使用销毁。销毁对象时Python的垃圾回收机制释放不再使用的内存(由于我也是初学,所以讲不清楚,也许是delete的del),不需要程序员负责。程序员只关心创建和使用对象,这一节介绍创建对象。

实例代码:

animal = Animal();

​ Animal是上一节定义的动物类,Animal()表达式创建了一个动物对象,并把创建的对象赋值给animal变量,animal是指向动物对象的一个引用。通过animal变量可以使用刚刚创建的动物对象。如下代码打印输出动物对象。

print(animal)

​ 输出结果如下:

<__main__.Animal object at 0x0000021BA5CCA908>

​ 屏幕会出现一堆晦涩难懂的信息。事实上,print函数调用了对象的__str__()方法,__str__()方法是object类的一个方法,我也不知道,先不用管。


提示:这种上下划线开始和结尾的方法是Python保留的,有着特殊的含义,称为魔法方法


构造方法

​ 构造方法就是__init()__方法,该方法用来创建和初始化实例变量,这种方法就是“构造方法”。__init()__方法也是一种魔法方法。定义它的第一个参数应该是self,其后的参数才是用来初始化实例变量的。调用构造方法时不用传入self

构造方法实例如下:

#-*- coding = utf-8 -*-

class Animal(object):
    """定义动物类"""

    def __init__(self, age, sex = 1, weight = 0.0):
        self.age = age          # 定义年龄实例变量
        self.sex = sex          # 定义性别实例变量
        self.weight = weight    # 定义体重实例变量


a1 = Animal(2, 0, 10.0)
a2 = Animal(1, weight = 5.0)
a3 = Animal(1, sex = 0)

print('a1年龄:{0}'.format(a1.age))
print('a2体重:{0}'.format(a2.weight))
print('a3性别:{0}'.format('雌性' if a3.sex == 0 else '雄性'))

输出结果:

a1年龄:2
a2体重:5.0
a3性别:雌性

print(‘a2体重:{0}’.format(a2.weight))
print(‘a3性别:{0}’.format(‘雌性’ if a3.sex == 0 else ‘雄性’))


输出结果:

a1年龄:2
a2体重:5.0
a3性别:雌性


​	上述代码第六行是定义构造方法,其中参数除了第一个*self*外,其他的参数可以有默认值,这也提供了默认值的构造方法,能够给调用者提供多个不同形式的构造方法。代码第12到第14行是调用狗仔方法创建Animal对象,其中不需要传入*self*,只需要后面三个实际参数。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章