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