Python学习之旅(核心编程基础篇012面向对象二)

Python学习之旅2021.01.11

指导教师:逻辑教育讲师Amy

一、私有属性和私有方法

  • 1.介绍:只能够在对象内部使用某些属性和方法
  • 2.私有属性:对象不公开的属性,定义时在属性名前加两个下划线,如__name
    在这里插入图片描述
  • 3.私有方法:对象不公开的方法,定义时在方法名前加两个下划线,如def __test(self)
    在这里插入图片描述
  • 4.注意:在Python中没有真正意义上的私有在访问时可以以object._类名__私有属性名/方法名进行访问,但是不建议使用

二、类的成员

在这里插入图片描述

  • 1.属性
    • 1)实例属性:属于对象,只能通过对象访问
      • 定义:self.属性名称
      • 访问:self.属性名称对象.属性名称
    • 2)类属性(静态属性):属于类,所有对象都共享。执行时,可以是对象访问,也可以是类访问
      • 定义:直接在类中定义
      • 访问:类名.属性名self.属性名对象.属性名
    • 3)注意:在开发中,如果属性值是固定不变,可使用类属性;如果属性值随对象改变,则使用对象属性
      在这里插入图片描述
  • 2.方法
    • 1)实例方法
      • 保存到类中,只能通过对象调用。定义时,第一个参数必须为系统自建参数,默认为self,指对象本身
      • 当在方法中使用实例属性时,通常定义实例方法
      • self是变量名,可以改为其他,但最好不要更换
    • 2)类方法
      • 在方法上面添加@classmethod装饰器,保存在类中
      • 类方法中无self参数,但系统会自建cls参数,cls指类本身
      • 类方法一般通过类调用,也可通过对象调用
    • 3)静态方法
      • 通过在方法上添加@staticmethod装饰器,保存到类中
      • 静态方法不需要传入self参数,即使传入,也为普通形参
      • 静态方法可以由对象调用,但一般通过类调用
      • 静态方法完全可放在类外部作为函数使用,放入类内部可更方便使用和维护
        在这里插入图片描述

三、封装

介绍:面向对象编程的一大特点,将属性和方法放到类的内部,通过对象访问,隐藏功能的实现特点,也可设置访问权限

四、继承

  • 一种创建心累方式。如果子类需要复用父类的属性和方法时,就可以使用继承
  • Python中子类可以继承多个父类。可以减少代码冗余
  • 新式类与经典类
    • Python2中,继承父类object则称为新式类,否则为经典类
    • Python3中,所有的类都是新式类,默认继承object
    • 对象.__dir__()可以查看对象的属性及方法,通过此方法可以判断Python3中全为心事类
      在这里插入图片描述
  • 单继承
    • 对象调用方法属性时遵循深度优先机制,即先从自身找,若无则从父类找,若还无则从父类的父类找,直到object类,若还无则报错
    • 当子类与父类拥有相同的方法时,子类方法会覆盖父类方法,此过程称为重写。
    • 实际开发过程中,并不会完全重写父类方法,而是希望同时实现父类功能,这时需要调用父类方法,可以通过super函数实现。
      • super(type[,object/type])
        在这里插入图片描述
    • 继承中__init__()方法也会被继承,但私有属性和私有方法不会继承

五、作业

  • 作业一
    在这里插入图片描述
    在这里插入图片描述

  • 作业二
    在这里插入图片描述

class CakeCls(object):
    def __init__(self):
        self.food = '生的'  # 初始化煎饼状态
        self.time = 0  # 初始化烹饪时间
        self.green = ''  # 初始化煎饼所加作料

    def ad_green(self, green):  # 煎饼添加作料的方法
        self.green = green

    def cook_time(self, time):  # 累计烹饪时间的方法
        self.time += time
        self.cook_status()  # 调用方法

    def cook_status(self):  # 判断食物状态的方法
        if self.time < 3:
            self.food = '生的'
        elif self.time < 5:
            self.food = '半生不熟的'
        elif self.time < 8:
            self.food = '熟的'
        else:
            self.food = '焦的'

    def __str__(self):  # 打印煎饼情况的魔法方法
        return f'煎饼烹饪时长{self.time},{self.food},加了{self.green}'


food = CakeCls()
food.cook_time(1)
food.cook_time(6)
# food.cook_status()  # 可将其放入类中
food.ad_green(input('请输入想要添加的作料:'))
print(food)  # 魔法方法打印

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值