[Python]小甲鱼Python视频第038课(类和对象:继承 )课后题及参考解答

Posted Alimy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python]小甲鱼Python视频第038课(类和对象:继承 )课后题及参考解答相关的知识,希望对你有一定的参考价值。

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 12 22:35:13 2019

@author: fengs
"""


"""
测试题:
0. 继承机制给程序猿带来最明显的好处是?
    提高代码复用,在不修改其他内容的情况下,只修改需要修改的方法或属性实现
    
1.如果按以下方式重写魔法方法 __init__,结果会怎样?
class MyClass:
    def __init__(self):
        return "I love FishC.com!"

构造函数的返回值只能是None


2. 当子类定义了与相同名字的属性或方法时,Python 是否会自动删除父类的相关属性或方法?
    不会删除,在子类中属性赋值会被覆盖,方法会被重写,在父类的对象中依然会存在父类的属性和方法

3. 假设已经有鸟类的定义,现在我要定义企鹅类继承于鸟类,但我们都知道企鹅是不会飞的,我们应该如何屏蔽父类(鸟类)中飞的方法?
    重写飞的方法,让飞的方法实际上的操作为不飞,覆盖行为
    
4. super 函数有什么“超级”的地方?
    可以父类的方法或引用父类的属性
    
5. 多重继承使用不当会导致重复调用(也叫钻石继承、菱形继承)的问题,请分析以下代码在实际编程中有可能导致什么问题?
class A():
    def __init__(self):
        print("进入A…")
        print("离开A…")

class B(A):
    def __init__(self):
        print("进入B…")
        A.__init__(self)
        print("离开B…")
        
class C(A):
    def __init__(self):
        print("进入C…")
        A.__init__(self)
        print("离开C…")

class D(B, C):
    def __init__(self):
        print("进入D…")
        B.__init__(self)
        C.__init__(self)
        print("离开D…")

A类的构造函数会被多次重复调用

6. 如何解决上一题中出现的问题?
    方法1.使用多次单重继承方法
    
    class A:
        
    class B(A):
        
    class C(B):
        
    class D(C):
    
    方法2.使用super().__init__()



"""


#测试题2
class Parent():
    def __init__(self):
        self.x = 1;
        self.y = 1;
        
    def print_var(self):
        print(‘Parent:self.x = %d,self.y = %d‘ % (self.x,self.y))

    
class Son(Parent):
    def __init__(self):
        super(Son,self).__init__()
        self.x = 2;
        self.y = 2;
    def print_var(self):
        print(‘Son:self.x = %d,self.y = %d‘ % (self.x,self.y))
    def super_print_var(self):
        super(Son,self).print_var()

#son = Son()
#son.super_print_var()
#son.print_var()
        
#测试题5
class A():
    def __init__(self):
        print("进入A…")
        print("离开A…")

class B(A):
    def __init__(self):
        print("进入B…")
        A.__init__(self)
        print("离开B…")
        
class C(A):
    def __init__(self):
        print("进入C…")
        A.__init__(self)
        print("离开C…")

class D(B, C):
    def __init__(self):
        print("进入D…")
        B.__init__(self)
        C.__init__(self)
        print("离开D…")
d = D()

"""
进入D…
进入B…
进入A…
离开A…
离开B…
进入C…
进入A…
离开A…
离开C…
离开D…
"""    


"""
0. 定义一个点(Point)类和直线(Line)类,使用 getLen 方法可以获得直线的长度。
""" 

class Point():
    def __init__(self,x = 0,y = 0):
        self.x = x
        self.y = y
    def getLoc(self):
        return (self.x,self.y)
    
class Line():
    def __init__(self,point_start,point_end):
        self.point_start = point_start
        self.point_end = point_end
    def getLen(self):
        start_loc = self.point_start.getLoc()
        end_loc = self.point_end.getLoc()
        
        distance = 0
        for i in range(2):
            distance += (start_loc[i] - end_loc[i])**2
        distance **= 0.5
        
        return distance

point_start = Point(1,3)
point_end = Point(1,-3)
line = Line(point_start,point_end)
print(line.getLen())
        
"""
1. 展示一个你的作品:你已经掌握了 Python 大部分的基础知识,要开始学会自食其力了!请花一个星期做一个你能做出来的最好的作品(可以是游戏、应用软件、脚本),使用上你学过的任何东西(类,函数,字典,列表……)来改进你的程序。
......
先寄下
"""

  

以上是关于[Python]小甲鱼Python视频第038课(类和对象:继承 )课后题及参考解答的主要内容,如果未能解决你的问题,请参考以下文章

[Python]小甲鱼Python视频第006课(Pyhon之常用操作符)课后题及参考解答

[Python]小甲鱼Python视频第014课(字符串:各种奇葩的内置方法)课后题及参考解答

[Python]小甲鱼Python视频第013课(元组:戴上了枷锁的列表)课后题及参考解答

[Python]小甲鱼Python视频第040课(类和对象:一些相关的BIF )课后题及参考解答

[Python]小甲鱼Python视频第029课(文件:一个任务)课后题及参考解答

[Python]小甲鱼Python视频第030课(文件系统:介绍一个高大上的东西)课后题及参考解答