Python学习日记-第十三天-面向对象


前言

最近在复习以前学习过的知识,所以更新慢了一点


                               面向对象

01.面向对象基本概念

·之前学习的编程方式 就是 面向过程的

·面对过程 和面对对象 是两种不同的 编程方式

1.1  过程和函数

·过程 是早期的编程概念

·过程 类似于函数,只能执行,但是没有返回值

·函数 不仅能执行,还能返回结果

1.2  面对过程 和 面对对象 基本概念

   1. 面对过程

  ·把完成某一个需求的 所有步骤 从头到尾 逐步实现

  ·根据开发需求,将某些 功能独立的 代码 封装 成一个又一个函数

  ·最后完成的代码,就是顺序的调用不同的函数

特点:

注重步骤于过程,不注重职责分工

如果需求复杂,代码会变得更复杂

开发复杂项目,没有固定的套路,开发难度大

     2. 面向对象——谁来做

   相比较函数,面向对象 是更大 的封装,根据 职责 在一个对象中 封装多个方法

·在完成某一个需求前,首先确定职责——要做的事情(方法)

·根据职责确定不同的对象,在对象内部封装不同的方法(多个)

·最后完成的代码,就是顺序的让不同的对象,调用不同的方法

特点:

注重对象的职责,不同的对象承担不同的职责

更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供固定套路

需要在面对过程基础上,在学习一些面向对象的语法

                    面向对象两个核心概念:类和对象

  1. 1类

·类是对一群具有相同特征 或者 行为 的失误的一个统称,是抽象的,不能直接使用

  特征 被称为 属性

  行为 被称为 方法

(例如:类 就相当于制造飞机的图纸,是一个模板,是负责创建对象的)

  1.  2对象

·对象是由类创建出来的一个具体存在,可以直接使用

·由哪一个类创建出来的对象,就是拥有在哪一个类中的定义的:属性和方法

(例:对象 就相当于用图纸 制造 的飞机)

在程序中,应该先有类,再有对象

   2. 类和对象的关系

·类是模板,对象 是根据类 这个模板创建出来的,应该先有类,再有对象

·类只有一个,而 对象 可以有很多个(不同的对象之间,属性 可能各不相同)

·类 中定义了什么 属性方法,对象 中就有什么属性和方法,不可能多,也不可能少

   3. 类的设计

在使用面向对象开发前,应该首相分析需求,确定一下,程序中需要包含哪些类

在程序开发中,需要设计一个类,通常需要满足以下三个要素:

  • 类名 这类事物的名字,满足大驼峰命名法
  • 属性 这类事物具有什么样的特征
  • 方法 这类事物具有什么样的行为

3.1类名的确定

名词提炼法 分析整个业务流程,出现的名词,通常就是找到的类

3.2属性和方法的确定

·对 对象的特征描述,通常可以定义成 属性

·对象具有的行为(动词),通常可以定义成 方法

                        面向对象的基础语法

01 定义一个简单的类(只包含方法)

面向对象 是更大的封装,在一个类中 封装对个方法,这样 通过这个类创建出来的对象,就可以直接调用这些方法

    1. 定义只包含方法的类
    2. 创建对象

下面是练习:

需求

小猫爱吃鱼,小猫要喝水

分析:

定义一个猫类 cat

定义两个方法 eat 和 drink

按照需求,暂时不需要定义属性:

 

 代码:

class Cat:

    def eat(self):

        print("小猫爱吃鱼")

    def drink(self):

        print("小猫要喝水")

# 创建毛对象
tom = Cat()


tom.eat()
tom.drink()

输出结果:

 下面是创建多个对象的练习:

 输出结果:

  1. 3案例改造——给对象增加属性

·在Python中,要给对象设置属性,非常的容易,但是不推荐使用(因为对象属性的封装应该在类的内部)

·只需要在 类的外部代码中 直接通过 . 设置一个属性即可

(注:这种方法虽然简单,但是不推荐使用)

 

 利用self 在类封装的方法中输出对象属性:

代码: 

class Cat:

    def eat(self):
        # 哪一个对象调用的方法,self就是哪一个对象的引用
        print("%s 爱吃鱼" % self.name)

    def drink(self):

        print("%s 要喝水" % self.name)

# 创建毛对象
tom = Cat()

# 可以使用 .属性名,利用赋值语句就行
tom.name = "Tom"

tom.eat()
tom.drink()

# 再创建一个对象
lazy_cat = Cat()

lazy_cat.name = "懒猫"
lazy_cat.eat()
lazy_cat.drink()

输出结果:

 

  1. 4 初始化方法

之前的代码存在的问题——在类的外部给对象增加属性

(注:在日常开发中,不推荐在 类的外部 给对象增加属性,如果在程序运行时,没有找到属性,程序会报错。对象包含的属性,应该封装在类的内部)

下面是报错的演示:

 初始化方法就是 __init__ 方法,是对象的内置方法(__init__方法是专门来定义一个类 具有那些属性的方法)

 代码:

class Cat:

    def __init__(self):

        print("这是一个初始化方法")

        self.name = "Tom"

tom = Cat()

print(tom.name)

输出结果:

 初始化方法的改造:利用参数设置初始值

 代码:

class Cat:

    def __init__(self,new_name):

        print("这是一个初始化方法")
        # self.属性名 = 属性的初始值
        self.name = new_name

    def eat(self):
        print("%s 爱吃鱼" % self.name)

tom = Cat("汤姆")
tom.eat()

print(tom.name)

lazy_cat = Cat("懒猫")
lazy_cat.eat()

输出结果:

 

  1. 5 内置方法和属性

①__del__ 方法 :对象被从内存中销毁前,会被自动调用

②__str__ 方法 :返回对象的描述信息,print 函数输出使用

__del__方法使用:

 代码:

class Cat:

    def __init__(self, new_name):

        self.name = new_name

        print("%s 来了" % self.name)

    def __del__(self):

        print("%s 走了" % self.name)
# tom是一个全局变量
tom = Cat("Tom")
print(tom.name)

print("_" * 50)

输出结果:

注:del是自动调用的。Tom走了 是出现在下划线下面,证明是在系统最后一次运行,在进行销毁的

__str__ 方法使用:

在使用 str 方法,必须返回一个字符串

 代码:

class Cat:

    def __init__(self, new_name):

        self.name = new_name

        print("%s 来了" % self.name)

    def __del__(self):

        print("%s 走了" % self.name)

    def __str__(self):

        # 必须返回一个字符串,要返回就可以使用return
        return "我是一只猫"

# tom是一个全局变量
tom = Cat("Tom")
print(tom)

输出结果:

 注:del 方法依然是在 str 方法后面输出的.


总结

面向对象,是在做开发时,最常用的方法。在开发比较复杂的代码时,比面向过程(函数)更加的实用,所以是非常重要的知识点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值