ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python基础day09 作业解析【面向对象题目(简答题+代码题)】

2022-02-03 19:58:33  阅读:254  来源: 互联网

标签:__ day09 run 简答题 Python self 父类 方法 def


目录

简答题

代码题

题目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.判断题

  1. a.一个子类可以继承多个父类   # 正确        
  2. b.类中的方法可以有return,也可以没有return   # 正确
  3. c.类方法和静态方法是一样的      # 错误
  4. d.删除对象时,默认调用 __init__ 方法  # 错误,创建对象调用__init__ 方法,删除对象调用 __del__ 方法
  5. e.python3中object是所有类的父类     # 正确
  6. f.python中不支持多继承        # 错误        
  7. g.父类中的所有方法和属性都会被继承        # 错误私有方法和属性不会继承
  8. h.一个对象可以当做一个参数来传递     # 正确    
  9. i.如果类属性和实例属性名字相同,那么实例对象调用时候使用的是类属性  # 错误,实例对象,调用的是实例属性
  10. j.实例对象不可以访问类属性      # 错误    
  11. k.重写方法后,父类对象默认调用重写后的方法     # 错误,子类调用重写后的方法,父类调用父类自己的方法
  12. l.类方法不可以通过实例对象来调用,只能通过类对象调用     # 错误    
  13. m.一个类只能创建一个对象    # 错误

代码题

题目1 [加强训练]

题干

  1. 创建一个Animal(动物)基类,其中有一个run方法,输出跑起来....

  2. 创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法

    1. run方法输出 跑起来....

    2. 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方法调用父类方法

参考答案

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 [综合训练]

题干

  1. 创建一个动物(Animal)的基类,其中有一个run方法, 输出跑起来....

  2. 创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法

    1. run方法输出 跑起来....

    2. eat 方法输出 吃东西...

  3. 创建一个 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 [综合训练]

题干

  1. 创建一个动物(Animal)的基类,其中有一个run方法, 输出跑起来....

  2. 创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法

    1. run方法输出 跑起来....

    2. eat 方法输出 马吃东西...

  3. 创建一个Donkey(驴)类继承于动物类,Donkey类中不仅有run方法还有eat方法

    1. run方法输出 跑起来....

    2. eat 方法输出 驴吃东西...

  4. 创建一个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函数中,测试结果

参考答案

# 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. 记录由该类创建的对象的个数,创建一个对象,计数+1, 删除一个对象,计数减一

  2. 定义一个方法,可以打印当前对象的个数

  3. 定义一个方法show_info,输出以下信息:这是一个Person类,谢谢查看!

  4. 打印对象的时候,可以输出打印自己的名字和年龄:我的名字是xxx,年龄是xxx。

  5. 定义一个方法 study,输出以下信息:我叫xxx,我要好好学习。

  6. 操作步骤

    1. 调用show_info方法;

    2. 创建两个对象,打印当前对象,并打印当前的对象个数;

    3. 分别使用两个对象调用study方法;

    4. 删除一个对象,打印输出当前的对象个数。

参考答案

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 xw
print(Person.get_count())

标签:__,day09,run,简答题,Python,self,父类,方法,def
来源: https://blog.csdn.net/weixin_44949135/article/details/122776594

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有