Python学习之旅2021.01.11
指导教师:逻辑教育讲师Amy
一、私有属性和私有方法
- 1.介绍:只能够在对象内部使用某些属性和方法
- 2.私有属性:对象不公开的属性,定义时在属性名前加两个下划线,如
__name
- 3.私有方法:对象不公开的方法,定义时在方法名前加两个下划线,如
def __test(self)
- 4.注意:在Python中没有真正意义上的私有在访问时可以以
object._类名__私有属性名/方法名
进行访问,但是不建议使用
二、类的成员
- 1.属性
- 1)实例属性:属于对象,只能通过对象访问
- 定义:self.属性名称
- 访问:
self.属性名称
或对象.属性名称
- 2)类属性(静态属性):属于类,所有对象都共享。执行时,可以是对象访问,也可以是类访问
- 定义:直接在类中定义
- 访问:
类名.属性名
或self.属性名
或对象.属性名
- 3)注意:在开发中,如果属性值是固定不变,可使用类属性;如果属性值随对象改变,则使用对象属性
- 1)实例属性:属于对象,只能通过对象访问
- 2.方法
- 1)实例方法
- 保存到类中,只能通过对象调用。定义时,第一个参数必须为系统自建参数,默认为self,指对象本身
- 当在方法中使用实例属性时,通常定义实例方法
- self是变量名,可以改为其他,但最好不要更换
- 2)类方法
- 在方法上面添加
@classmethod
装饰器,保存在类中 - 类方法中无self参数,但系统会自建
cls
参数,cls
指类本身 - 类方法一般通过类调用,也可通过对象调用
- 在方法上面添加
- 3)静态方法
- 通过在方法上添加
@staticmethod
装饰器,保存到类中 - 静态方法不需要传入self参数,即使传入,也为普通形参
- 静态方法可以由对象调用,但一般通过类调用
- 静态方法完全可放在类外部作为函数使用,放入类内部可更方便使用和维护
- 通过在方法上添加
- 1)实例方法
三、封装
介绍:面向对象编程的一大特点,将属性和方法放到类的内部,通过对象访问,隐藏功能的实现特点,也可设置访问权限
四、继承
- 一种创建心累方式。如果子类需要复用父类的属性和方法时,就可以使用继承
- Python中子类可以继承多个父类。可以减少代码冗余
- 新式类与经典类
- Python2中,继承父类
object
则称为新式类,否则为经典类 - Python3中,所有的类都是新式类,默认继承
object
对象.__dir__()
可以查看对象的属性及方法,通过此方法可以判断Python3中全为心事类
- Python2中,继承父类
- 单继承
- 对象调用方法属性时遵循深度优先机制,即先从自身找,若无则从父类找,若还无则从父类的父类找,直到
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) # 魔法方法打印