学习python的第22天

一.函数递归实例分析

1.字符串反转

例如将某字符串s反转后输出,根据我们之前所掌握的知识,可以通过

>>> s[::-1]

来实现字符串反转,即从后向前依次取出。

而如果使用函数递归,该如何实现呢?

由之前所学我们可以了解到,要想构成递归,我们需要函数+分支结构,要有递归链条和递归基例

像这样通过函数自我多次调用,最终将整个字符串反转

2.斐波那契数列

斐波那契数列天然的带有两个基例,即n=1orn=2时F(n)均等于1,当n>2,f(n)=f(n-1)+f(n-2),如下

二.Python类和对象

1.面向对象编程

面向对象编程(Object-oriented Programming,简称 OOP),是一种封装代码的方法。其实,在前面章节的学习中,我们已经接触了封装,比如说,将乱七八糟的数据扔进列表中,这就是一种简单的封装,是数据层面的封装;把常用的代码块打包成一个函数,这也是一种封装,是语句层面的封装。

而代码封装,就是隐藏具体的代码,仅仅留下供用户使用的接口,就比如我现在点击鼠标,为什么电脑就会有相应的反应,我们也不需要知道它具体是如何工作的,用户只要知道怎么用就可以

而面向对象编程,可以更好的模拟出现实世界的事物(将其视为对象)


打个比方,若在某游戏中设计一个乌龟的角色,应该如何来实现呢?使用面向对象的思想会更简单,可以分为如下两个方面进行描述:

    从表面特征来描述,例如,绿色的、有 4 条腿、重 10 kg、有外壳等等。
    从所具有的的行为来描述,例如,它会爬、会吃东西、会睡觉、会将头和四肢缩到壳里,等等。

表面特征,就可以利用变量赋值来规定其特定的状态

行为,可以用函数来定义,即这个对象它能做什么,或者说能实现什么

在面向对象编程中,最为重要的有以下概念


    类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
    方法:类中定义的函数。
    类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
    数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
    方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
    局部变量:定义在方法中的变量,只作用于当前实例的类。
    实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
    继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
    实例化:创建一个类的实例,类的具体对象。
    对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

我们从类开始理解

2.类的定义

比如人类是类,男人是类,学者是类,诸如这些有相同特点的对象的集合就是类,它是抽象的,不是具体存在的某一个体

进而,引出了对象这个概念,对象是类的实例化,是具体且唯一的,它包括类变量,实例变量和方法(这些内容我们将一一介绍)

定义类的语法格式

class 类名:
    多个(≥0)类属性...
    多个(≥0)类方法...

类名倘若只满足语法要求那你随便取,然而我们在具体规定时必须要考虑到程序的可读性,要求是

Python 的类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,
单词与单词之间不要使用任何分隔符。

比如这样


#!/usr/bin/python3
 
class MyClass:
    """一个简单的类实例"""
    i = 12345
    def f(self):
        return 'hello world'
 
# 实例化类
x = MyClass()
 
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())

另外,上面还涉及到了类对象的属性引用和实例化

在python中,属性引用的标准语法均为:obj.name

类的定义与函数定义有些相似,都以:作为类体的开始,以统一缩进的部分作为类体,差别在于关键字不同

Python 的类定义由类头(指 class 关键字和类名部分)和统一缩进的类体构成,在类体中最主要的两个
成员就是类变量和方法。如果不为类定义任何类变量和方法,那么这个类就相当于一个空类,如果空类不需
要其他可执行语句,则可使用 pass 语句作为占位符。例如,如下类定义是允许的:
    class Empty:
        pass

 然而这毫无意义

另外类中各成员的定义顺序没有影响,各成员间可以随意调用

类中最重要的是变量和方法,那么回顾上面的表面特征和行为,实际上对变量赋值就是定义了对象的特征,创建一个函数就是实现了对类中对象可以执行的某一行为的规定


其实,类属性指的就是包含在类中的变量;而类方法指的是包含类中的函数。换句话说,类属性和类方法
其实分别是包含类中的变量和函数的别称。需要注意的一点是,同属一个类的所有类属性和类方法,要保
持统一的缩进格式,通常统一缩进 4 个空格。

类属性的具体位置是在类中且在函数体之外

再给一个例子

    class TheFirstDemo:
        '''这是一个学习Python定义的第一个类'''
        # 下面定义了一个类属性
        add = 'http://c.biancheng.net'
        # 下面定义了一个say方法
        def say(self, content):
            print(content)

三引号之内的内容是该类的说明文档,位置是类头之后,类体之前

先到这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值