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

......

先寄下

"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值