第六周学习总结

面向对象

目标
了解 面向对象 基本概念

  1. 面向对象基本概念
    我们之前学习的编程方式就是 面向过程 的
    面相过程 和 面相对象,是两种不同的 编程方式
    对比 面向过程 的特点,可以更好地了解什么是 面向对象
    1.1 过程和函数(科普)
    过程 是早期的一个编程概念
    过程 类似于函数,只能执行,但是没有返回值
    函数 不仅能执行,还可以返回结果

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

  1. 面相过程 —— 怎么做?
    把完成某一个需求的 所有步骤 从头到尾 逐步实现
    根据开发需求,将某些 功能独立 的代码 封装 成一个又一个 函数
    最后完成的代码,就是顺序地调用 不同的函

特点
1.注重 步骤与过程,不注重职责分工
2.如果需求复杂,代码会变得很复杂

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

  1. 面向对象 —— 谁来做?
    相比较函数,面向对象 是 更大 的 封装,根据 职责 在 一个对象中 封装 多个方法

在完成某一个需求前,首先确定 职责 —— 要做的事情(方法)
根据 职责 确定不同的 对象,在 对象 内部封装不同的 方法(多个)
最后完成的代码,就是顺序地让 不同的对象 调用 不同的方法

特点

1.注重 对象和职责,不同的对象承担不同的职责
2.更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路
3.需要在面向过程基础上,再学习一些面向对象的语法

类和对象

  1. 类和对象的概念
    类 和 对象 是 面向对象编程的 两个 核心概念
    1.1 类
    是对一群具有 相同 特征 或者 行为 的事物的一个统称,是抽象的,不能直接使用
    特征 被称为 属性
    行为 被称为 方法

    就相当于制造飞机时的图纸,是一个 模板,是 负责创建对象的
    1.2 对象
    对象 是 由类创建出来的一个具体存在,可以直接使用
    哪一个类 创建出来的 对象,就拥有在 哪一个类 中定义的:
    属性
    方法
    对象 就相当于用 图纸 制造 的飞机

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

  1. 类和对象的关系
    类是模板,对象 是根据 类 这个模板创建出来的,应该 先有类,再有对象
    类 只有一个,而 对象 可以有很多个
    不同的对象 之间 属性 可能会各不相同
    类 中定义了什么 属性和方法,对象 中就有什么属性和方法,不可能多,也不可能少
  2. 类的设计
    在使用面相对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类!
    在程序开发中,要设计一个类,通常需要满足一下三个要素:
    类名 这类事物的名字,满足大驼峰命名法
    属性 这类事物具有什么样的特征
    方法 这类事物具有什么样的行为
    大驼峰命名法
    每一个单词的首字母大写
    单词与单词之间没有下划线
    3.1 类名的确定
    名词提炼法 分析 整个业务流程,出现的 名词,通常就是找到的类
    3.2 属性和方法的确定
    对 对象的特征描述,通常可以定义成 属性
    对象具有的行为(动词),通常可以定义成 方法

方法
在这里插入图片描述
在这里插入图片描述
例如:

class Cat:

    def __init__(self, name):
        print("初始化方法 %s" % name)
        self.name = name  # 在类的内部添加属性不容易报错

在这里插入图片描述
在这里插入图片描述
例如:

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)

# del 关键字可以删除一个对象
del tom

print("-" * 50)

在这里插入图片描述

注意一定要返回一个字符串 return
在这里插入图片描述

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 "我是小猫:%s" % self.name
tom = Cat("Tom")
print(tom)


定义简单的类:

class 类名:
	def 方法1(self,参数列表):
		pass #占位
	def 方法2(self,参数列表):
		pass #占位

方法 的定义格式和之前学习过的 函数 几乎一样
区别在于第一个参数必须是 self类名规则要符合大驼峰命名法

例如:
第一个面向对象的程序
在这里插入图片描述
1.首先定义一个猫类Cat
2.定义两个方法:eat 和 drink
3.按照需求——不需要定义属性
在这里插入图片描述

创建对象
当一个类定义完成之后,要使用这个类来创建对象

对象变量 = 类名()

class Cat:
    """这是一个猫类"""

    def eat(self):
        print("小猫爱吃鱼")

    def drink(self):
        print("小猫在喝水")

tom = Cat()
tom.drink()
tom.eat()

哪一个对象 调用的方法,方法内的 self 就是 哪一个对象的引用

在这里插入图片描述
运用实例:
在这里插入图片描述

class Cat:

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

tom = Cat()
tom.name = "Tom"
tom.eat()

lazy_cat = Cat()
lazy_cat.name = "大懒猫" #给name赋值
lazy_cat.eat()  #调用eat方法

在这里插入图片描述
例如:

#在 类的外部,通过 变量名. 访问tom对象的 name属性和eat方法
tom.name = "Tom"
tom.eat()
#在 Cat类封装的方法中,通过 self. 访问对象的name 属性和方法
print("%s 爱吃鱼" % self.name)

在这里插入图片描述

最终例子:
在这里插入图片描述

class HouseItem:

    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return "[%s] 占地面积 %.2f" % (self.name, self.area)


# 1. 创建家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)

print(bed)
print(chest)
print(table)


class House:

    def __init__(self, house_type, area):
        self.house_type = house_type
        self.area = area

        # 剩余面积默认和总面积一致
        self.free_area = area
        # 默认没有任何的家具
        self.item_list = []

    def __str__(self):
        # Python 能够自动的将一对括号内部的代码连接在一起
        return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
                % (self.house_type, self.area,
                   self.free_area, self.item_list))


    def add_item(self, item):
        print("要添加 %s" % item)
        # 1. 判断家具面积是否大于剩余面积
        if item.area > self.free_area:
            print("%s 的面积太大,不能添加到房子中" % item.name)

            return

        # 2. 将家具的名称追加到名称列表中
        self.item_list.append(item.name)

        # 3. 计算剩余面积
        self.free_area -= item.area
...

# 2. 创建房子对象
my_home = House("两室一厅", 60)

my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值