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

      

    ~不再更新,都不让我写公式,博客园太拉胯了
  • 相关阅读:
    commons-fileupload源码学习心得
    commons-io源码阅读心得
    java反射机制
    构建简单的socket连接池
    maven主仓库中找不到restlet的解决办法
    修改eclipse中web项目的server部署路径
    Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project '项目名'
    JVM中的Stack和Heap
    JVM工作原理和特点
    spring mvc 3.1的自动注入参数遇到的问题
  • 原文地址:https://www.cnblogs.com/alimy/p/10520317.html
Copyright © 2011-2022 走看看