Python 面向对象 (一) 基础

学习目标

  • 理解面向对象
  • 类和对象
  • 添加和获取对象属性
  • 魔法方法

一 理解面向对象

  • 面向对象是一种抽象的编程思想 ,很多编程语言都有的一种思想
  • 面向对象是把一组数据结构和处理他们的方法组成对象,把具有相同行为的对象归纳成,通过封装隐藏类的内部细节,通过继承使类得到泛化,通过多态实现基于对象类型的动态分派。
    封装 继承 多态

二 类和对象

面向对象的两个正要做成部分:
类 和 对象
[关系] : 用类去 创造一个对象.

2.1 理解类和对象

2.1.1 类

类是具有相同特征行为的事物的统称,不是真实存在的事物.

  • 特征 即是属性
  • 行为即是方法

2.1.2 对象

对象是用类创造出来的真实事物

注意 :
开发中 先有类,再有对象
定义类,创建对象 print(对象名) 输出 内存地址

print(haier) #  打印 出内存地址,说明对象创建成功
 => <__main__.类洗衣机 object at 0x0000000001241BA0>

2.2 面向对象的实现方法

2.2.1 定义类

  • 语法

class 类名():
代码

注意 类名,一般要遵循大驼峰 规则

2.2.2 创建对象

  • 语法

对象名=类()

2.2.3 体验

  • 需求 :洗衣机洗衣服
  • 思路: 先定义类 然后用类创建对象

三个步骤
1 定义类
2 创建需求
3 验证

  • 代码
 # 定义类
class 类洗衣机():
	def 功能(self):
		print("能洗衣服")
 # 创建对象
 海尔=类洗衣机()

 # 验证
 #打印haier 对象
 print(haier) #  打印 出内存地址,说明对象创建成功
 => <__main__.类洗衣机 object at 0x0000000001241BA0>

 # 使用 功能  实例方法/函数  ---  对象名.功能():
 海尔.功能()
=> 能洗衣服

2.2.4 self

self 是 调用函数的对象
1 一个类可以创建多个对象,
2 多个对象都调用类的函数, 但self的地址不同.

三 添加和获取 对象的属性

属性 即特征,比如 洗衣机的 长\宽\重量 自然属性
对象属性既可以在的外面添加和获取,也可以在 类的里面添加和获取

3.1 类的外面添加 对象属性

  • 语法

对象名.属性名=值

  • 体验

海尔.高=500
海尔.宽=800

3.2 类的里面添加

  • 语法

属性名=值

  • 体验

class 类洗衣机():

高=500
宽=600

#创建对象
海尔=类洗衣机

3.3 在类的外面获取对象属性

print(海尔.宽) # 打印 出内存地址,说明对象创建成功
=>600

3.4 在类的里面获取对象属性

  • 语法

self.属性名

  • 体验
# --*coding:utf-8*--
# 定义类
class 类洗衣机():
	# 类里面获取实例属性
    def print_info(self):
        #self.属性名
        print(self.)
        print(self.)
# 创建对象
海尔=类洗衣机()

# 添加实例属性
海尔.=500
海尔.=800

# 对象调用实例方法
海尔.print_info()

=>800
=>500

四 魔法方法

在Python里面 , xx()的函数叫 魔法方法, 指有特殊功能的函数

4.1 init()

4.1.1 体验 init()

思考 洗衣机的高宽是天生就有的属性, 那么在生产过程中就赋予这些属性

==init(),的作用: 初始化对象 ==

  • 语法

def init(self):

self.宽=500
self.高=600

  • 思路

1 定义 类

init魔法方法:宽和高
添加实例方法 : 访问实例属性

2 创建对象
3 验证成功

抵用实例方法

  • 体验
# --*coding:utf-8*--
# 定义类
class 类洗衣机():
    # 定义__init__().添加实例属性
    def __init__(self):
        #添加实例属性,
        self.=600
        self.=500
    def 打印信息(self):
        #类里面调用实例属性
        print(self.,self.)

# 创建对象
海尔=类洗衣机()

# 验证
海尔.打印信息()

注意:

  • init()方法, 在创建对象是 不需手动调用 ,会被自动调用的
  • init(self)中的self参数,不需要开发者传递 , 自动把当前对象的引用传递过去

4.1.2 带参数的 init()

一个类可以创建不同的对象,如何对不同的对象设置不同的初始化属性

  • [思考] 一个洗衣机类, 可以创建 海尔 海信 两种洗衣机, 如何设置 他们的 不同的初始化属性
  • 语法

init(self,宽,高)

  • 体验
# --*coding:utf-8*--
# 定义类
class 类洗衣机():
  # 定义__init__().添加实例属性
  def __init__(self,,):
      #添加实例属性,
      self.=宽
      self.=def 打印信息(self):
      #类里面调用实例属性
      print(self.,self.)

# 创建对象
海尔=类洗衣机(500,300)
海信=类洗衣机(400,500)
# 验证
海尔.打印信息()
海信.打印信息()

4.2 str(): 一般返回一些解释说明的文字

  • 当使用print输出对象名的时候, 默认的打印对象的看不懂的 内存地址.
 print(haier) #  打印 出内存地址,说明对象创建成功
 => <__main__.类洗衣机 object at 0x0000000001241BA0>
  • 如果 类定义了__str__()方法, 就会return的出,解释\说明的文字 ,或者解释 类的属性,或者是类的状态

    • 代码
 # --*coding:utf-8*--
# 定义类
class 类洗衣机():
   def __init__(self,,):
       self.=def __str__(self):
       return (f"这是的说明书")
海尔=类洗衣机(500,300)
print(海尔)
=>这是的说明书

4.3 del():

当删除对象是, Python会自动调用del方法

五 综合应用

面向对象 通用步骤

1 分析需求

   用的时间   ===>  地瓜状态

2 步骤分析

     上归类     地瓜类 

2.1 定义类 (属性和方法)

  2.1.1 基本属性  初始化属性 __init__(self):
  2.1.2 方法  /函数  def 函数名():
  2.1.3 显示信息/return状态   __str__(self):

2.2 创建对象 ,测试实例属性和实例方法

5.1 烤地瓜

场景描述:
烤地瓜 ,一会拿出来看看, 如不熟,就再放里面烤,一会再看看 ,累加
时间和状态

5.1.1 需求

需求主线:
1 被烤的时间和对应状态
0-5分钟 生的
5-10分钟 熟了
10分钟以上 糊了
2 添加调料:

5.1.2 步骤分析

需求涉及 一个事物: 地瓜 -->地瓜类 上归类

5.1.2.1 定义类

面向对象 通用步骤

1 分析需求

   用的时间   ===>  地瓜状态

2 步骤分析

     上归类     地瓜类 

2.1 定义类 (属性和方法)

  2.1.1 基本属性  初始化属性 __init__(self):
  2.1.2 方法  /函数  def 函数名():
  2.1.3 显示信息/return状态   __str__(self):

2.2 创建对象 ,测试实例属性和实例方法

# --*coding:utf-8*--
"""
[分析需求]
1\根据烤地瓜的时间 ,累计时间判断地瓜的状态
2\根据加入的调料,输出地瓜的味道

[步骤分析]
1\定义类  初始化属性  方法/函数  输出状态信息
2\创建对象, 测试实例属性和实例方法

"""
# 1\ 定义类
class 地瓜():
    # 初始化属性
    def __init__(self):
        self.时间=0
        self.状态="生的"
        self.味道=[]
    # 实例方法/函数
    def 烤地瓜(self,时间):
        self.时间+=时间
        if 0<=self.时间<5:self.状态="生的"
        elif 5<=self.时间<10:self.状态="熟了"
        elif 10<=10:self.状态="糊了"
    def 加调料(self,调料):
        self.味道.append(调料)
    def __str__(self):
        return f"对象地瓜的烤了{self.时间},{self.状态},味道{self.味道}"
# 创建对象
红地瓜=地瓜()
print(红地瓜)  #对象地瓜的烤了0,生的,味道[]
红地瓜.烤地瓜(7)
print(红地瓜)  #对象地瓜的烤了7,熟了,味道[]
红地瓜.加调料("红糖")
print(红地瓜)   # 对象地瓜的烤了7,熟了,味道['红糖']

5.2 搬家具

5.2.1 需求

将小于房子剩余面积的家具 放到房子里

5.2.2 步骤分析

上归类 房子 家具

5.2.2.1 定义类
  • 房子类
    – init() 初始化属性 位置 占地面积 剩余面积
    – def () 剩余面积计算, 对比是否能放的下
    – str () return 出去是否放的下
  • 家具 类
    – init () 初始化面积 面积
    关键问题:跨类的参数传递 item
5.2.2.2 创建实例对象, 验证实例属性和方法
#--*coding=utf-8*--
"""
[需求]  把小于房子剩余面积的家具搬进房子
步骤
1\ 定义类, 房子 和 家具初始化属性
2\方法/函数  ①判断剩余面积 ②判断是否放的下
3\创建对象,检验实例属性和方法
"""
# 定义类
class 家具类():
    def __init__(self,家具名称,家具面积):
        self.家具名称=家具名称
        self.家具面积=家具面积

class 房子类():
    def __init__(self,位置,占地面积):
        self.位置=位置
        self.占地面积=占地面积
        self.剩余面积=占地面积
        self.家具列表=[]
    def 搬家具(self,item):
        if self.剩余面积>=item.家具面积:
            self.家具列表.append(item.家具名称)
            self.剩余面积-=item.家具面积

        else:print("盛不下了")
    def __str__(self):
        return f"位于{self.位置}的房子,占地{self.占地面积},剩余{self.剩余面积},现有家具{self.家具列表}"
# 创建对象=家具类("双人床",6)
桌子=家具类("餐桌",3)

东城102=房子类("长安街12号",140)
print(东城102)
东城102.搬家具()
print(东城102)
东城102.搬家具(桌子)
print(东城102)

在这里插入图片描述

六 小结 面向对象

  • 组成部分
    – 类
    class 类名()
    代码
    – 对象
    对象名=类名()

  • 添加对象属性
    – 类里面
    self.属性名=值
    – 类外面
    对象名.属性名=值

  • 获取对象属性
    – 类里面
    self.属性名
    – 类外面
    对象名.属性名

  • 魔法方法

       __init__()  :初始化属性
       __str__()  :返回对象信息,状态
       __del__()  :删除对象的调用
    

[版权声明] 文字整理 b站视频 https://www.bilibili.com/video/BV1kT4y1971R?p=27
原作者不明,侵删

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值