写给新手的 python 的教程(三)

简介: 写给新手的 python 的教程(三)

1. 面向对象

编程语言中,一般有两种编程思维,面向过程和面向对象。 面向过程即函数

面向过程,看重的是解决问题的过程。

这好比我们解决日常生活问题差不多,分析解决问题的步骤,然后一步一步的解决。

而面向对象是一种抽象,抽象是指用分类的眼光去看世界的一种方法。

Python 就是一门面向对象的语言

面向对象都有两个基本的概念,分别是类和对象。

  • 「类」

用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

  • 「对象」

通过类定义的数据结构实例

1.1. 怎么理解类

可以将他理解为一个加强版的函数或者说是一个加强版的模板

类里面可以有属性(变量)和方法(函数)

1.2. 怎么定义类

知道了类是什么样子的,我们接下来就要学习怎么去定义类了。

类定义语法格式如下:

class ClassName():
    pass
class ClassName:
    pass

可以看到,我们是用 class 语句来自定义一个类的,其实这就好比我们是用 def 语句来定义一个函数一样。

类是变量和方法的集合包,那么我们来创建一个类。

class Stu:
    school = "SDAU"
    def where_from(self):
        print(f"我来自于{self.school}")
    def which_sex(self,sex=1):
        if sex:
            print("你是男生")
        else:
            print("你是女生")

1.3. 怎么调用类属性和类方法

我们定义了类之后,那么我们怎么调用类里面的属性和方法呢?

使用 .来去访问一个类的属性或者方法,所以对于我们自己构造的Stu

class Stu:
    school = "SDAU"
    def where_from(self):
        print("我来自于" + self.school)
    def which_sex(self,sex=1):
        if sex:
            print("你是男生")
        else:
            print("你是女生")
>>> s = Stu()
>>> s.school
'SDAU'
>>> s.where_from()
'我来自于SDAU'

1.4. 类和对象之间的关系

这部分内容主要讲类和对象,我们先来说说类和对象之间的关系。

「类是对象的模板」

我们得先有了类,才能制作出对象。

类就相对于工厂里面的模具,对象就是根据模具制造出来的产品。

「从模具变成产品的过程,我们就称为类的实例化。」

「类实例化之后,就变成对象了。也就是相当于例子中的产品。」

1.5. 初始化函数

初始化函数的意思是,当你创建一个实例的时候,这个函数就会被调用。

先对上面的类进行改装

class Stu:
    school = "SDAU"
    def __init__(self):
        print("这是一个初始化函数,在进行实例化的时候这个函数就会自动运行")
    def where_from(self):
        print("我来自于" + self.school)
    def which_sex(self,sex=1):
        if sex:
            print("你是男生")
        else:
            print("你是女生")

当代码在执行 s = Stu() 的语句时,就自动调用了 __init__(self) 函数。

「而这个 __init__(self)  函数就是初始化函数,也叫构造函数。」

初始化函数的写法是固定的格式:中间是 init,意思是初始化,然后前后都要有【双下划线】, __init__() 函数的第一个参数一定要写上 self,不然会报错。

构造函数(初始化函数)格式如下:

def __init__(self,[...):
    ...

初始化函数一样可以传递参数的,例如:

class Stu:
    school = "SDAU"
    def __init__(self,name):
        self.name = name
    def where_from(self):
        print("我来自于" + self.school + '的' + self.name)
    def which_sex(self,sex=1):
        if sex:
            print("你是男生")
        else:
            print("你是女生")

将一个方法变成一个属性,使用@property装饰器

class Stu:
    school = "SDAU"
    def __init__(self,name):
        self.name = name
    @property
    def where_from(self):
        print(f"我来自于{self.school}的{self.name}")
        return school
    def which_sex(self,sex=1):
        if sex:
            print("你是男生")
        else:
            print("你是女生")


1.6. 类的特性

面向对象有三个特点,分别是继承、多态、封装,这里只讲继承特性。继承和生活中的继承类似,就是说继承者可以拥有被继承者的东西。下面我们先来看下面一段代码。

class Dog:
    def eat(self,food):
        print(food)
class Cat:
    def eat(self,food):
        print(food)

我们定义了两个类,分别是DogCat他们都有eat方法,但是可以发现eat方法做的事情是一样的,这里都只是打印一下,可以想象一下,如果做的事情很复杂,写的代码也就随之增加,那么这个时候就意味着两个类的eat方法会很长,但是又相同,那么有没有一个方法可以只写一遍,就可以被这两个类所使用那?答案是有的,继承是一个有效的方法。

class Animal:
    def eat(self,food):
        print(food)
class Cat(Animal):
    ...
class Dog(Animal):
    ...

通过创建一个Animal类,让DogCat都继承自他,这样就可以拥有Animal的方法,从而减少代码量,便于维护。

2. 错误处理

2.1. 错误类型

先来看一段代码

a = 1/0
print("这一行不会运行,因为第一行就报错了")

上面的代码如果放到python中运行会报错ZeroDivisionError: sectionision by zero因为分母不能为0

大家可以想一个问题,在我们写代码的过程中,总是避免不了出错,只要出现错误我们的程序就不会再继续运行。错误有两种

「一种是写代码过程中出现的语法错误」

list1 = [1,2,3,4]
for i in list1  #这里会报错,因为没有加冒号,属于语法错误
    print(i)
# SyntaxError: invalid syntax

「一种是除语法错误之外的错误」

a = 1/0  # 这里会报错,因为0不能作为分母

我们要讲的错误处理就是为了解决第二种错误,除语法错误之外的错误

错误处理的本质就是让程序不在纠结迷茫

2.2. 错误捕捉

python中使用try-except语句来进行错误的捕捉,具体的看下面的例子

try:
    a = 1/0
except:
    print("a = 1/0这一句有错误时,就会运行这一句")
else:
    print("a = 1/0这一句没有错误时,就会运行这一句")
finally:
    print("无论a = 1/0这一句有没有错误时,这一句都会运行")

如果我们希望获取错误信息

try:
    a = 1/0
except Exception as e:  
    # 这里的Exception代表所有的错误类型
    # 就说是只要是报错,错误都都属于Exception
    print(e)

2.3. 错误抛出

使用raise关键字来抛出错误

raise 错误的名字("对错误的说明")

举个例子

def convert(list_data):
    if isinstance(list_data,list):
        raise TypeError(u"这个函数的作用对象是一个列表")
    else:
        return [i*i for i in list_data]

2.4. 自定义错误

python中自定义错误的实现是基于类的继承来实现的

# 定义错误
class MyError(Exception):
    # 使用类的继承
    pass
# 在代码中使用自定义的错误
try:
    raise MyError("这是一个我自定义的错误类型")
except MyError as e:
    print(e)

完~

相关文章
|
9天前
|
数据采集 存储 JSON
Python网络爬虫教程概览
【6月更文挑战第21天】Python网络爬虫教程概览:安装requests和BeautifulSoup库抓取网页;使用HTTP GET请求获取HTML,解析标题;利用CSS选择器提取数据;处理异步内容可选Selenium;遵循爬虫策略,处理异常,尊重法律与网站规定。
18 1
|
3天前
|
Shell Python
Python教程:return和yield的区别
Python教程:return和yield的区别
6 0
Python教程:return和yield的区别
|
5天前
|
数据采集 存储 数据处理
使用Python获取1688商品详情的教程
使用Python爬取1688商品详情,涉及requests库抓取页面、BeautifulSoup解析HTML,安装必要库如requests、beautifulsoup4、pandas和lxml。通过get_page发送请求,BeautifulSoup解析提取如标题、价格等信息。数据处理后可使用pandas保存至CSV。注意遵守法律法规和网站政策,避免频繁请求。[代码片段及更多详情见链接
|
11天前
|
设计模式 测试技术 Python
Python教程:一文了解PageObject模式
PageObject 模式通常用于 Web 应用程序的 UI 自动化测试,尤其是在使用 Selenium、Appium 、Airtest等工具进行测试时非常有效。但是,它并不局限于特定类型的应用或工具,而是一种通用的设计模式,可以用于任何需要进行 UI 自动化测试的场景。
24 5
|
11天前
|
存储 数据安全/隐私保护 计算机视觉
Python教程:一文了解从Bytes到Bits的数据转换
在Python编程中,处理数据时经常需要在字节(bytes)和位(bits)之间进行转换。这种转换在网络通信、数据加密、图像处理等领域尤为常见。本文将详细介绍如何在Python中进行字节与位之间的转换,并提供一个实用的功能:如何在指定的位位置替换位数据。
23 4
|
11天前
|
存储 Python
Python教程:深入理解Python中的命名空间和作用域
在 Python 编程中,理解命名空间(Namespace)和作用域(Scope)是至关重要的。它们决定了变量和函数的可见性和访问性,并直接影响代码的结构和行为。本文将深入探讨 Python 3 中命名空间和作用域的概念、规则以及相关的高级主题。
24 4
|
11天前
|
Python
Python教程:一文了解Python的深拷贝与浅拷贝
理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。
19 4
|
11天前
|
算法 Java Python
Python教程:深入了解Python垃圾回收机制
在Python中,垃圾回收(Garbage Collection)是一种自动管理内存的机制,它可以自动识别和清理不再使用的对象,释放它们占用的内存空间,以提高内存利用率和程序性能。
16 3
|
11天前
|
搜索推荐 算法 Python
Python教程:使用Python实现冒泡排序和快速排序
排序算法根据其实现原理和效率可以分为多种类型,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。这些算法在不同的场景下具有不同的优劣势,需要根据实际需求选择合适的算法。
25 3
|
9天前
|
存储 JSON 数据格式
Python基础语法汇总【保姆级小白教程】
我将 Python语法分为14个章节,从第一章Python基础概念到第14章模块&异常处理,本篇文章将逐一为大家讲述.
41 0
Python基础语法汇总【保姆级小白教程】