定义类的几种语法
==目标:==了解定义类的标准语法。
我们知道,可以使用class关键字定义类。
在类的使用中,定义方式有三种:
(1)【类名】
(2)【类名()】
(3)【类名(object)】
说明:区别在于类名后面是否加其他内容。
方式1语法:
class 类名: 代码 ...
方式2语法:
class 类名(): 代码 ...
方式3语法:
class 类名(object): # 推荐 代码 ...
说明:方式3是定义类最常见的语法。
例如,一起来完成:
(1)使用方式1/2/3分别定义老师类、学生类、手机类;
(2)当成功定义后,观察类的效果。
# 1.类名 # class Teacher: class Teacher: pass # 2.类名() class Student(): # 删除() pass # 3.类名(object) class Phone(object): # 标准 pass
==总结:==
(1)定义一个类的语法有3种,但是更规范标准的是();==A、类名(object)==;B、类名();
(2)注意:在实际应用中,建议都采用【类名(object)】方式来定义类。
==休息一下,16:40继续上课。==
什么是继承
==目标:==了解什么是继承?
在现实生活中,继承一般指的是:子女继承父辈的财产。
说明:当继承了父辈的财产后,则归子女所有。
类似的,在面向对象中,当子类继承父类后,则:子类拥有了父类的属性和方法。
继承语法:
class 父类名(object): 代码 ...
class 子类名(父类名): 代码 ...
说明:
(1)建议在定义父类时,都采用【类名(object)】语法;
(2)当子类拥有了父类的属性和方法后,能提升代码的复用性。
例如,一起来完成:
(1)Father类有一个性别属性,默认为男,同时,Father跑步速度快;
(2)如果Son类也想要拥有这些属性和方法,该怎么做呢?
(3)执行程序,观察程序效果。
# 1.定义父类 class Father(object): def __init__(self): self.sex = "男" def run(self): print("跑步很快...") # 2.定义子类 # class Son(object): # def __init__(self): # self.sex = "男" # # def run(self): # print("跑步很快...") # 3.改进 class Son(Father): pass # 4.输出 son = Son() print(f"属性:{son.sex}") son.run()
==总结:==
(1)子类继承父类的语法是:class 子类名(父类名): ...;
(2)注意:object类可以称为基类、顶级类或超类,而案例中的Son类一般称为()、派生类。==A、子类==;B、父类;
单继承
==目标:==掌握单继承的使用。
单继承指的是:一个子类继承一个父类。语法:
class 子类名(父类名): 代码 ...
接着,一起来听个故事。故事主线是:一个徒弟跟着老师傅学习摊煎饼……
例如,一起来完成:
(1)从前,有个摊煎饼的老师傅[Master],在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼技术;
(2)渐渐地,老师傅老了,就想着把这套技术传授给他唯一的最得意的徒弟[TuDi];
(3)试着通过初始化、无参、定义方法与单继承来模拟程序。
# 1.定义父类:老师傅 # 配方 # 摊煎饼 class Master(object): def __init__(self): self.pei_fang = "【独创古法配方】" def make_cake(self): print("老师傅用古法配方摊煎饼果子...") # 2.定义子类:徒弟 class TuDi(Master): pass # 3.创建对象 fang_ge = TuDi() print(fang_ge.pei_fang) fang_ge.make_cake()
==总结:==
(1)单继承就是一个子类继承了一个父类,语法:class 子类名(父类名): ...;
(2)注意:当子类继承了父类后,子类可以拥有父类的属性和方法。
多继承
==目标:==掌握多继承的使用。
多继承指的是:一个类同时继承了多个父类。语法:
class 子类名(父类名1, 父类名2, ...): 代码 ...
继续,回到摊煎饼的故事主线。
例如,一起来完成:
(1)徒弟是个爱学习的好孩子,想学习更多的摊煎饼技术;
(2)于是,在百度搜索到黑马程序员学校[School],报班来培训学习如何摊煎饼;
(3)使用多继承形式模拟程序。
# 1.定义父类:老师傅 class Master(object): def __init__(self): self.pei_fang = "【独创古法配方】" def make_cake(self): print("老师傅用古法配方摊煎饼果子...") # 2.学校 class School(object): def __init__(self): self.pei_fang = "【科技与狠活之黑马配方】" def make_cake(self): print("===========采用黑马配方制作煎饼果子!!") # 3.定义子类:徒弟 class TuDi(Master,School): pass
==总结:==
(1)当一个类同时继承了多个父类时,这种行为就叫做();==A、多继承==;B、单继承;
(2)注意:在Python面向对象中,继承包含:单继承、多继承、多层继承。
子类调用方法的顺序
==目标:==了解子类调用父类方法的顺序。
当子类同时继承多个父类,并调用多个父类同名方法的顺序,查看时使用:
类名.__mro__
类名.mro()
例如,一起来完成:
(1)可以发现老师傅[Master]、培训学校[School]都有摊煎饼方法;
(2)在徒弟对象中调用摊煎饼方法,会执行哪个父类的方法呢?
(3)思考:当给父类培训学校[School]新增编程方法后,子类能调用方法吗?
# 1.定义父类:老师傅 class Master(object): def __init__(self): self.pei_fang = "【独创古法配方】" def make_cake(self): print("老师傅用古法配方摊煎饼果子...") # 2.学校 class School(object): def __init__(self): self.pei_fang = "【科技与狠活之黑马配方】" def make_cake(self): print("===========采用黑马配方制作煎饼果子!!") def programming(self): print("====培训大数据开发!") # 3.定义子类:徒弟 class TuDi(Master,School): pass # 创建对象、调用方法 fang_ge = TuDi() # a.先去子类中去查找该方法,若存在,则直接使用 # b.去第1个父类中查找TuDi(【Master】,School) # c.去第2个父类中找 # d.object找 print(TuDi.__mro__) print(TuDi.mro()) fang_ge.make_cake() fang_ge.programming()
==总结:==
(1)当子类继承父类后,可以给子类添加新的扩展方法;
(2)当要查看子类调用父类方法的顺序时,可以使用
子类名.__mro__
或()。==A、mro()==;B、self();