零基础学习Python 作业 第38章
0. 继承机制给程序员带来最明显的好处是?
减少重复代码,优化代码机构!
1.如果按一下方式重写魔法方法 __init__,结果会怎样?
class MyClass:
def __inint__(self):
renturn "I Iove FishC.com!"
class MyClass:
def __init__(self):
return "I Iove FishC.com!"
c = MyClass()
print(dir(c))
c.__init__()
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/untitled/lianxi006.py", line 669, in <module>
c = MyClass()
TypeError: __init__() should return None #类型错误:__init__()应该不返回任何值
class MyClass:
def __init__(self):
print "I Iove FishC.com!"
c = MyClass()
print(dir(c))
c.__init__()
输出:
I Iove FishC.com!
['__doc__', '__init__', '__module__']
I Iove FishC.com!
Process finished with exit code 0
2.当之类定义了余相同名称的属性或方法时,Python 是否会自动删除父类相关属性或方法?
覆盖,子类调用时候回调用到覆盖的方法或属性,但是父类本身的方法和属性仍然存在!
3.假设已将有鸟的定义,现在我要定义企鹅类继续与鸟类,但是企鹅不会飞,我们应该如果屏蔽父类鸟中的飞的方法?
class Bird(object):
def fly(self):
print("鸟会飞")
def eat(self):
print("鸟会吃东西")
class Penguin(Bird):
def fly(self):
pass 命名与父类一致,达到屏蔽父类方法作用,使用pass直接通过,
c = Penguin()
c.fly()
c.eat()
输出:
C:\Python27\python.exe C:/Users/Administrator/Desktop/untitled/lianxi006.py
鸟会吃东西
Process finished with exit code 0
4.super 函数的超级作用?
答: 超级之处 就是 不需要明确给出任何基类的名称,它会自动帮你找出所有父类及对应的方法,由于你不需要给出基类名称,就意味着你在需需要改变
类的继承关系时候,你只要改变class 语句中的父类即可,而不必在大量代码中取修改说有被继承的方法
5.多重继承使用不当会导致重复使用的问题,请分析一下代码在实际编程中有可能导致失眠问题?
class A(object):
def __init__(self):
print("进入A...")
print("离开A...")
class B(A):
def __init__(self):
print("进入B...")
super(B,self).__init__()
print("离开B...")
class C(A):
def __init__(self):
print("进入C...")
super(C,self).__init__()
print("离开C...")
class D(B,C):
def __init__(self):
print("进入D...")
super(D,self).__init__()
print("离开D...")
c = D()
输出:
C:\Python27\python.exe C:/Users/Administrator/Desktop/untitled/lianxi006.py
进入D...
进入B...
进入C...
进入A...
离开A...
离开C...
离开B...
离开D...
Process finished with exit code 0
动手题:
0.定义一个点(Point)类和直线(Line)类,使用getLen方法可以获得直线的长度。

import math
class Point(object):
def __init__(self,x=0,y=0):
self.x = x
self.y = y
def getx(self):
return self.x
def getY(self):
return self.y
class Line():
def __init__(self,p1,p2):
self.x = p1.getx() - p2.getx()
self.y = p1.getY() - p2.getY()
self.len = math.sqrt(self.x*self.x + self.y*self.y)
def getLen(self):
return self.len
p1 = Point(1,1)
p2 = Point(4,5)
line = Line(p1,p2)