zoukankan      html  css  js  c++  java
  • [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 大部分的基础知识,要开始学会自食其力了!请花一个星期做一个你能做出来的最好的作品(可以是游戏、应用软件、脚本),使用上你学过的任何东西(类,函数,字典,列表……)来改进你的程序。
    ......
    先寄下
    """
    

      

    ~不再更新,都不让我写公式,博客园太拉胯了
  • 相关阅读:
    【解题报告】 洛谷P1663 山
    【解题报告】 洛谷P6733 间歇泉
    【解题报告】 洛谷P1542 包裹快递
    二分总结
    SmartSchool CC校友录V8(毕业入世版)
    Hide/Show running Console
    Calculate drive total/free/available space
    C# list installed softwares
    How to: Modify a Project System So That Projects Load in Multiple Versions of Visual Studio
    PS:WINRAR制作32位安装程序和64位安装程序选项
  • 原文地址:https://www.cnblogs.com/alimy/p/10520317.html
Copyright © 2011-2022 走看看