视频、源码、课件、软件、笔记:超全面Python基础入门教程【十天课程】博客笔记汇总表【黑马程序员】
Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】
Python基础day09 作业解析【面向对象题目(简答题+代码题)】
Python基础day09【试题讲解《python基础中期考试》】
目录
简答题
代码题
题目1 [加强训练]
题干
训练目标
训练提示
参考方案
操作步骤
参考答案
题目2 [加强训练]
题干
训练目标
训练提示
参考方案
操作步骤
参考答案
题目3 [综合训练]
题干
训练目标
训练提示
参考方案
操作步骤
参考答案
题目4 [综合训练]
题干
训练目标
训练提示
参考方案
操作步骤
参考答案
题目5 [综合训练]
题干
训练目标
训练提示
参考方案
操作步骤
参考答案
题目 6[综合训练]
题干
参考答案
简答题 1.请写出单继承的格式?
class 子类名(父类名):
pass
2.什么是重写?为什么要重写?
重写:子类实现父类中的同名方法。
为什么要重写:父类中的方法不能满足子类对象的需求。
3.如何将一个属性变为私有的?
在属性名前加上两个下划线。
4.定义类方法的语法格式?
# 使用@classmethod 装饰的方法,是类方法
class MyClass(object):
@classmethod
def func(cls):
pass
5.定义静态方法的语法格式?
# 使用@staticmethod装饰的方法,是静态方法
class MyClass(object):
@staticmethod
def func():
pass
6.请判断下面类中,哪些是类属性,哪些是实例属性?
class Car(obj):
addr = "china"
def __init__(self):
self.name = 'changcheng'
self.money = 100000
答案:
addr:类属性
self.name:实例属性
self.money:实例属性
7.判断题
a.一个子类可以继承多个父类。# 正确,多继承。b.类中的方法可以有return,也可以没有return。 # 正确c.类方法和静态方法是一样的。# 错误d.删除对象时,默认调用 __init__方法。# 错误。创建对象调用__init__方法;删除对象调用__del__方法。e.python3中object是所有类的父类。# 正确f.python中不支持多继承。# 错误g.父类中的所有方法和属性都会被继承。# 错误,私有方法和属性不会继承。h.一个对象可以当做一个参数来传递。# 正确i.如果类属性和实例属性名字相同,那么实例对象调用时候使用的是类属性。# 错误,实例对象调用的是实例属性。j.实例对象不可以访问类属性。# 错误k.重写方法后,父类对象默认调用重写后的方法。# 错误。子类调用重写后的方法;父类调用父类自己的方法。l.类方法不可以通过实例对象来调用,只能通过类对象调用。# 错误,类方法可以通过实例对象来调用。m.一个类只能创建一个对象。# 错误,一个类能创建很多个对象。
代码题 题目1 [加强训练] 题干 创建一个Animal(动物)基类,其中有一个run方法,输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法。
run方法输出 跑起来....
eat 方法输出 吃东西...
训练目标 单继承的使用
训练提示
继承的语法格式是什么?
继承有什么特点?
子类中增加父类中没有的方法
参考方案
继承的语法格式如下:
class 子类(父类):
pass
继承的特点:子类继承父类之后,子类对象可以使用父类的属性和方法,即会将父类中的属性和方法继承
操作步骤
定义一个Animal(动物)类,实现run方法
定义子类Horse(马)继承父类,实现eat方法
参考答案
1.请写出单继承的格式?
class 子类名(父类名):
pass
2.什么是重写?为什么要重写?
重写:子类实现父类中的同名方法。
为什么要重写:父类中的方法不能满足子类对象的需求。
3.如何将一个属性变为私有的?
在属性名前加上两个下划线。
4.定义类方法的语法格式?
# 使用@classmethod 装饰的方法,是类方法
class MyClass(object):
@classmethod
def func(cls):
pass
5.定义静态方法的语法格式?
# 使用@staticmethod装饰的方法,是静态方法
class MyClass(object):
@staticmethod
def func():
pass
6.请判断下面类中,哪些是类属性,哪些是实例属性?
class Car(obj):
addr = "china"
def __init__(self):
self.name = 'changcheng'
self.money = 100000
答案:
addr:类属性
self.name:实例属性
self.money:实例属性
7.判断题
a.一个子类可以继承多个父类。# 正确,多继承。b.类中的方法可以有return,也可以没有return。 # 正确c.类方法和静态方法是一样的。# 错误d.删除对象时,默认调用 __init__方法。# 错误。创建对象调用__init__方法;删除对象调用__del__方法。e.python3中object是所有类的父类。# 正确f.python中不支持多继承。# 错误g.父类中的所有方法和属性都会被继承。# 错误,私有方法和属性不会继承。h.一个对象可以当做一个参数来传递。# 正确i.如果类属性和实例属性名字相同,那么实例对象调用时候使用的是类属性。# 错误,实例对象调用的是实例属性。j.实例对象不可以访问类属性。# 错误k.重写方法后,父类对象默认调用重写后的方法。# 错误。子类调用重写后的方法;父类调用父类自己的方法。l.类方法不可以通过实例对象来调用,只能通过类对象调用。# 错误,类方法可以通过实例对象来调用。m.一个类只能创建一个对象。# 错误,一个类能创建很多个对象。题目1 [加强训练] 题干 创建一个Animal(动物)基类,其中有一个run方法,输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法。
run方法输出 跑起来....
eat 方法输出 吃东西...
训练目标 单继承的使用
训练提示
继承的语法格式是什么?
继承有什么特点?
子类中增加父类中没有的方法
参考方案
继承的语法格式如下:
class 子类(父类):
pass
继承的特点:子类继承父类之后,子类对象可以使用父类的属性和方法,即会将父类中的属性和方法继承
操作步骤
定义一个Animal(动物)类,实现run方法
定义子类Horse(马)继承父类,实现eat方法
参考答案
创建一个Animal(动物)基类,其中有一个run方法,输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法。
run方法输出 跑起来....
eat 方法输出 吃东西...
训练目标 单继承的使用
训练提示
继承的语法格式是什么?
继承有什么特点?
子类中增加父类中没有的方法
参考方案
继承的语法格式如下:
class 子类(父类):
pass
继承的特点:子类继承父类之后,子类对象可以使用父类的属性和方法,即会将父类中的属性和方法继承
操作步骤
定义一个Animal(动物)类,实现run方法
定义子类Horse(马)继承父类,实现eat方法
参考答案
单继承的使用
继承的语法格式是什么?
继承有什么特点?
子类中增加父类中没有的方法
参考方案
继承的语法格式如下:
class 子类(父类):
pass
继承的特点:子类继承父类之后,子类对象可以使用父类的属性和方法,即会将父类中的属性和方法继承
操作步骤
定义一个Animal(动物)类,实现run方法
定义子类Horse(马)继承父类,实现eat方法
参考答案
继承的语法格式如下:
class 子类(父类):
pass
继承的特点:子类继承父类之后,子类对象可以使用父类的属性和方法,即会将父类中的属性和方法继承
定义一个Animal(动物)类,实现run方法
定义子类Horse(马)继承父类,实现eat方法
参考答案
class Animal(object): def run(self): print("跑起来...")class Horse(Animal): def eat(self): print("吃东西...")
题目2 [加强训练] 题干 创建一个动物(Animal)的基类,其中有一个run方法,输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中重写run方法,增加打印输出"迈着矫健的步伐跑起来",同时实现eat方法,输出 吃东西...
训练目标
子类重写父类中的方法
子类调用父类中的方法
训练提示
如何重写父类方法?
如何在子类中调用父类的方法?
参考方案
定义父类
子类继承父类
重写父类方法
调用父类方法
操作步骤
创建父类
创建子类
重写父类方法
使用super方法调用父类方法
参考答案
创建一个动物(Animal)的基类,其中有一个run方法,输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中重写run方法,增加打印输出"迈着矫健的步伐跑起来",同时实现eat方法,输出 吃东西...
子类重写父类中的方法
子类调用父类中的方法
如何重写父类方法?
如何在子类中调用父类的方法?
定义父类
子类继承父类
重写父类方法
调用父类方法
创建父类
创建子类
重写父类方法
使用super方法调用父类方法
class Animal(object): def run(self): print("跑起来...")class Horse(Animal): def run(self): # 调用父类中的run方法, # super(Horse, self).run() # 方法一 Animal.run(self) # 方法二 print("迈着矫健的步伐跑起来...") def eat(self): print("吃东西...")c = Horse()c.run()c.eat()
题目3 [综合训练] 题干 创建一个动物(Animal)的基类,其中有一个run方法,输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法
run方法输出 跑起来....
eat 方法输出 吃东西...
创建一个 SwiftHorse(千里马)类继承Horse类,初始化init方法、name属性为千里马
训练目标 多层继承
训练提示
Horse 继承 Animal
SwiftHorse 继承 Horse
参考方案 SwiftHorse类都拥有那些属性和方法?
操作步骤
定义Animal类
定义Horse类继承Animal类
定义SwiftHorse类继承Horse类
参考答案
创建一个动物(Animal)的基类,其中有一个run方法,输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法
run方法输出 跑起来....
eat 方法输出 吃东西...
创建一个 SwiftHorse(千里马)类继承Horse类,初始化init方法、name属性为千里马
多层继承
Horse 继承 Animal
SwiftHorse 继承 Horse
SwiftHorse类都拥有那些属性和方法?
定义Animal类
定义Horse类继承Animal类
定义SwiftHorse类继承Horse类
class Animal(object): def run(self): print("跑起来...")class Horse(Animal): def eat(self): print("吃东西...")class SwiftHorse(Horse): def __init__(self): self.name = "千里马"
题目4 [综合训练] 题干 创建一个动物(Animal)的基类,其中有一个run方法, 输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法
run方法输出 跑起来....
eat 方法输出 马吃东西...
创建一个Donkey(驴)类继承于动物类,Donkey类中不仅有run方法还有eat方法
run方法输出 跑起来....
eat 方法输出 驴吃东西...
创建一个Mule(骡子)类继承于Horse,Donkey,初始化name为 骡子。 问题: 创建 Mule 类的对象, 调用 eat 方法,调用的是哪个父类中的方法?
训练目标 多继承
训练提示
多继承,当使用super时调用的是哪个父类的方法?
使用super() 是否调用所有的父类方法?只执行多少次。调用顺序遵循什么顺序。
参考方案
如果继承了多个父类,且父类都有同名方法,则默认只执行第一个父类的(同名方法只执行一次,目前super()不支持执行多个父类的同名方法)
使用super() 可以逐一调用所有的父类方法,并且只执行一次。调用顺序遵循 mro 类属性的顺序。
操作步骤
定义Horse类
定义Donkey类
定义Mule类,继承Horse、Donkey。
参考答案
创建一个动物(Animal)的基类,其中有一个run方法, 输出跑起来....
创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法
run方法输出 跑起来....
eat 方法输出 马吃东西...
创建一个Donkey(驴)类继承于动物类,Donkey类中不仅有run方法还有eat方法
run方法输出 跑起来....
eat 方法输出 驴吃东西...
创建一个Mule(骡子)类继承于Horse,Donkey,初始化name为 骡子。 问题: 创建 Mule 类的对象, 调用 eat 方法,调用的是哪个父类中的方法?
多继承
多继承,当使用super时调用的是哪个父类的方法?
使用super() 是否调用所有的父类方法?只执行多少次。调用顺序遵循什么顺序。
如果继承了多个父类,且父类都有同名方法,则默认只执行第一个父类的(同名方法只执行一次,目前super()不支持执行多个父类的同名方法)
使用super() 可以逐一调用所有的父类方法,并且只执行一次。调用顺序遵循 mro 类属性的顺序。
定义Horse类
定义Donkey类
定义Mule类,继承Horse、Donkey。
class Animal(object): def run(self): print("跑起来...")class Horse(Animal): def eat(self): print("马吃东西...")class Donkey(Animal): def eat(self): print("驴吃东西...")class Mule(Horse, Donkey): def __init__(self): self.name = "骡子"# 创建 Mule 类对象mule = Mule()# 调用同名方法,是第一个父类中的方法mule.eat()
题目5 [综合训练] 题干 创建一个动物类(Animal),其中有一个run方法
创建一个Cat类继承于动物类,具有私有属性__name = "波斯猫"
创建一个Dog类继承于动物类,具有私有属性__name = "京巴狗"
Cat类中不仅有run方法还有eat方法
Dog类中方法同上
创建一个letRun函数,可以接收动物及其子类对象,并调用run方法 class Cat(Animal):
编写测试代码以验证功能正常
训练目标
多态的使用
私有属性的使用
训练提示
多态的使用地点
函数接收的参数可以为一个对象
参考方案
定义一个函数,接收一个类的对象
创建出的对象传入到方法中
在方法中调用对应的方法
操作步骤
创建一个动物的基类,其中有一个run方法
创建一个Cat类继承于动物类
创建一个Dog类继承于动物类
cat和dog中创建属性和方法
创建一个letRun函数,可以接收动物及其子类对象,并调用run方法
创建不同的对象,分别传入到letRun函数中,测试结果
参考答案
创建一个动物类(Animal),其中有一个run方法
创建一个Cat类继承于动物类,具有私有属性__name = "波斯猫"
创建一个Dog类继承于动物类,具有私有属性__name = "京巴狗"
Cat类中不仅有run方法还有eat方法
Dog类中方法同上
创建一个letRun函数,可以接收动物及其子类对象,并调用run方法 class Cat(Animal):
编写测试代码以验证功能正常
多态的使用
私有属性的使用
多态的使用地点
函数接收的参数可以为一个对象
定义一个函数,接收一个类的对象
创建出的对象传入到方法中
在方法中调用对应的方法
创建一个动物的基类,其中有一个run方法
创建一个Cat类继承于动物类
创建一个Dog类继承于动物类
cat和dog中创建属性和方法
创建一个letRun函数,可以接收动物及其子类对象,并调用run方法
创建不同的对象,分别传入到letRun函数中,测试结果
# 1.创建一个动物的基类,其中有一个run方法class Animal(object): def run(self): print('跑起来')# 2.创建一个Cat类继承于动物类class Cat(Animal): # 4.Cat类中不仅有run方法还有eat方法 def __init__(self): self.__name = "波斯猫" def run(self): print('%s在跑' % self.__name) def eat(self): print('%s在吃' % self.__name)# 3.创建一个Dog类继承于动物类class Dog(Animal): # 5.方法同上 def __init__(self): self.__name = "京巴狗" def run(self): print('%s在跑' % self.__name) def eat(self): print('%s在吃' % self.__name)# 6.创建一个letRun函数,可以接收动物及其子类对象,并调用run方法 class Cat(Animal):def letRun(animal): animal.run()# 7.编写测试代码以验证功能正常# 动物测试animal = Animal()letRun(animal)# 猫测试cat = Cat()letRun(cat)cat.eat()# 狗测试dog = Dog()letRun(dog)dog.eat()
题目 6[综合训练] 题干 定义一个Person 类,包含初始化init 方法:
实例属性:名字name、年龄age
记录由该类创建的对象的个数:创建一个对象,计数+1;删除一个对象,计数减一。
定义一个方法,可以打印当前对象的个数。
定义一个方法show_info,输出以下信息:这是一个Person类,谢谢查看!
打印对象的时候,可以输出打印自己的名字和年龄:我的名字是xxx,年龄是xxx。
定义一个方法 study,输出以下信息:我叫xxx,我要好好学习。
操作步骤
调用show_info方法;
创建两个对象,打印当前对象,并打印当前的对象个数;
分别使用两个对象调用study方法;
删除一个对象,打印输出当前的对象个数。
参考答案
参考答案定义一个Person 类,包含初始化init 方法:
实例属性:名字name、年龄age
记录由该类创建的对象的个数:创建一个对象,计数+1;删除一个对象,计数减一。
定义一个方法,可以打印当前对象的个数。
定义一个方法show_info,输出以下信息:这是一个Person类,谢谢查看!
打印对象的时候,可以输出打印自己的名字和年龄:我的名字是xxx,年龄是xxx。
定义一个方法 study,输出以下信息:我叫xxx,我要好好学习。
操作步骤
调用show_info方法;
创建两个对象,打印当前对象,并打印当前的对象个数;
分别使用两个对象调用study方法;
删除一个对象,打印输出当前的对象个数。
class Person(object): # 定义类属性count,统计该类创建的对象的个数 __count = 0 # 定义init方法,创建实例属性 def __init__(self, name, age): self.name = name self.age = age Person.__count += 1 # 定义类方法,打印当前对象的个数 @classmethod def get_count(cls): return cls.__count # 定义静态方法show_info @staticmethod def show_info(): print('这是一个Person类, 谢谢查看!') # 定义str方法 def __str__(self): return f"姓名:{self.name}, 年龄:{self.age}。" # 定义study方法 def study(self): print(f"我叫 {self.name}, 我要好好学习。") # 定义__del__方法 def __del__(self): Person.__count -= 1# 调用show_info方法Person.show_info()print(Person.get_count())xw = Person('小王', 18)print(xw, xw.get_count())xh = Person('小红', 18)print(xh, xh.get_count())xw.study()xh.study()del xwprint(Person.get_count())