python面向对象编程

小白如何成为python数据分析师

第 十五 天---->面向对象编程

你有对象吗?下次遇到有人这样问,你就可以直接回答他,谁都有对象,因为一切皆为对象

我们之前的编程都是指令式编程,即输入指令一条一条的执行,程序简单时没有任何问题,但是随着问题复杂性的增加,指令式编程将会明显不能更好的支持我们解决问题。为了能更好的解决复杂的问题,我们用到了面向对象编程

程序是指令的集合”,运行程序时,程序中的语句会变成一条或多条指令,然后由CPU(中央处理器)去执行。为了简化程序的设计,我们用到了函数,把相对独立且经常重复使用的代码放置到函数中,在需要使用这些代码的时候调用函数即可。如果一个函数的功能过于复杂和臃肿,我们又可以进一步将函数进一步拆分为多个子函数来降低系统的复杂性。

编程范式(programming paradigm):是程序设计的方法学,是程序员对程序的认知和理解。如今流行的编程范式主要有:面向对象编程 、函数式编程

面向对象定义

为了解决“软件危机”,人们引入了“面向对象编程”的编程范式。在面向对象编程的里,程序中的数据和操作数据的函数是一个逻辑上的整体,我们称之为对象对象可以接收消息,解决问题的方法就是创建对象并向对象发出各种各样的消息;通过消息传递,程序中的多个对象可以协同工作,这样就能构造出复杂的系统并解决现实中的问题。

面向对象编程:把一组数据和处理数据的方法组成对象,把行为相同的对象归纳为,通过封装隐藏对象的内部细节,通过继承实现类的特化和泛化,通过多态实现基于对象类型的动态分派。

类:

将有共同特征(静态特征和动态特征)的对象的共同特征抽取出来之后得到的一个抽象概念

简单的说,类是对象的蓝图(模板),有了类才能够创建出这种类型的对象。

对象:

对象:对象是可以接收消息的实体,面向对象编程就是通过给对象发消息达到解决问题的目标。对象是一个具体的概念。

对象 = 数据 + 函数(方法)—> 对象将数据和操作数据的函数从逻辑上变成了一个整体。

对象的特性:~ 一切皆为对象
对象都有属性和行为
每个对象都是独一无二的
对象一定属于某个类
面向对象编程

三大步:

  1. 定义类 —> 类的命名使用驼峰命名法(每个单词首字母大写)
    数据抽象:找到和对象相关的静态特征(属性)—> 找名词
    行为抽象:找到和对象相关的动态特征(方法)—> 找动词
  2. 造对象

  3. 发消息

定义类

在Python中,可以使用class关键字加上类名来定义类,通过缩进我们可以确定类的代码块,就如同定义函数那样。在类的代码块中,我们需要写一些函数,我们说过类是一个抽象概念,那么这些函数就是我们对一类对象共同的动态特征的提取。写在类里面的函数我们通常称之为方法,方法就是对象的行为,也就是对象可以接收的消息。方法的第一个参数通常都是self,它代表了接收这个消息的对象本身。

数据抽象(属性):找到这个类的属性

行为抽象(方法):找到这个类可以做的事情。

# 第一步:定义类
class Student:
    """学生"""

    # 数据抽象(属性)
    def __init__(self, name, age):
        # 初始化方法
        self.name = name
        self.age = age

    # 行为抽象(方法)
    def eat(self):
        """吃饭"""
        print(f'{
     self.name}正在吃饭.')

    def study(self, course_name):
        """学习"""
        print(f'{
     self.name}正在学习{
     course_name}.')

    def play(self, game_name):
        """玩"""
        print(f'{
     self.name}正在玩{
     game_name}.')

    def watch_tv(self):
        """看电视"""
        print(f'{
     self.name}正在观看岛国片.')

注意:定义类时使用驼峰法---->类名第一个字母大写。

创建对象

在我们定义好一个类之后,可以使用构造器语法来创建对象,

# 第二步:创建对象 ---> 构造器语法 ---> 类名(..., ...)
stu1 = Student('张三', 26)
stu2 = Student('李四', 31)

在类的名字后跟上圆括号就是所谓的构造器语法,上面的代码创建了两个学生对象,一个赋值给变量stu1,一个赋值给变量stu2

发消息(调用对象的方法)
# 通过“类.方法”调用方法,第一个参数是接收消息的对象,第二个参数是学习的课程名称
Student.study(stu1, 'Python程序设计')    # 张三正在学习Python程序设计.
# 通过“对象.方法”调用方法,点前面的对象就是接收消息的对象,只需要传入第二个参数
stu1.study('Python程序设计')             # 张三正在学习Python程序设计.

Student.play(stu2)    # 李四正在玩游戏.
stu2.play()           # 李四正在玩游戏.
初始化方法

如果要给学生对象定义属性,我们可以修改Student类,为其添加一个名为__init__的方法。在我们调用Student类的构造器创建对象时,首先会在内存中获得保存学生对象所需的内存空间,然后通过自动执行__init__方法,完成对内存的初始化操作,也就是把数据放到内存空间中。

我们可以通过给Student类添加__init__方法的方式为学生对象指定属性,同时完成对属性赋初始值的操作,正因如此,__init__方法通常也被称为初始化方法。

# 定义类
class Student:
    """学生"""

    def __init__(self, name, age):
        """初始化方法"""
        self.name = name
        self.age = age

    def study(self, course_name):
        """学习"""
        print(f'{
     self.name}正在学习{
     course_name}.')

    def play(self):
        """玩耍"""
        print(f'{
     self.name}正在玩游戏.')
# 创建对象
# 由于初始化方法除了self之外还有两个参数
# 所以调用Student类的构造器创建对象时要传入这两个参数
stu1 = Student('张三', 40)
stu2 = Student('李四', 15)

# 发消息
stu1.study('Python程序设计')    # 张三正在学习Python程序设计.
stu2.play()                    # 李四正在玩游戏.
魔术方法(魔法方法)

我们通过__init__方法在创建对象时为对象绑定了属性并赋予了初始值。在Python中,以两个下划线__(读作“dunder”)开头和结尾的方法通常都是有特殊用途和意义的方法,我们一般称之为魔术方法魔法方法。如果我们在打印对象的时候不希望看到对象的地址而是看到我们自定义的信息,可以通过在类中放置__repr__魔术方法来做到,该方法返回的字符串就是用print函数打印对象的时候会显示的内容。

class Student:
    """学生"""

    def __init__(self, name, age):
        """初始化方法"""
        self.name = name
        self.age = age

    def study(self, course_name):
        """学习"""
        print(f'{
     self.name}正在学习{
     course_name}.')

    def play(self):
        """玩耍"""
        print(f'{
     self.name}正在玩游戏.')
    
    def __repr__(self):
        return f'{
     self.name}: {
     self.age}'


stu1 = Student('张三', 25)
print(stu1)        # 张三:25
students = [stu1, Student('李四', 16)
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值