抽象多态继承方法
继承
class Shape():
def __init__(self,w,l):
self.width = w
self.length = l
def print_size(self):
print("""{} by {}
""".format(self.width,
self.length))
class Square(Shape):#继承了Shape
pass
square = Square(20,20)
square.print_size()
方法覆盖
class Shape():
def __init__(self,w,l):
self.width = w
self.length = l
def print_size(self):
print("""{} by {}
""".format(self.width,
self.length))
class Square(Shape):
def area(self):
return self.width * self.length
def print_size(self):
print("""I am {} by {}
""".format(self.width,self.length))
square = Square(20,20)
square.print_size()
组合
class Dog():
def __init__(self,
name,
breed,
ower):
self.name = name
self.breed = breed
self.ower = ower
class Person():
def __init__(self,
name):
self.name = name
mick = Person("Mick Jagger")
stan = Dog("Stanley",
"Bulldog",
mick)
print(stan.owner.name)
挑战练习
1.创建 Rectangle 和 Square 类,使它们均有一个叫 calculate_perimeter
的方法,计算其所表示图形的周长。创建 Rectangle 和 Sqaure 对象,并调用二者的
周长计算方法。
class Rectangle():
def __init__(self,w,l):
self.width = w
self.length = l
def calculate_perimeter(self):
return (self.width + self.length)*2
class Square(Rectangle):
pass
rectangle = Rectangle(30,20)
print(rectangle.calculate_perimeter())
square = Square(40,30)
print(square.calculate_perimeter())
2.在 Square 类中,定义一个叫 change_size 的方法,支持传入一个数字,增
加或减少(数字为负时)Square 对象的边长。
class Rectangle():
def __init__(self,w,l):
self.width = w
self.length = l
def calculate_perimeter(self):
return (self.width + self.length)*2
class Square(Rectangle):
pass
def change_size(self):
return (self.width + a + self.length + a)*2
a = int(input("请输入一个数字:"))
square = Square(40,30)
print(square.change_size())
3.创建一个叫 Shape 的类。在其中定义一个叫 what_am_i 的方法,被调用时打
印"I am s shape"。调整上个挑战中的 Square 和 Rectangle 类,使其继承 Shape
类,然后创建 Sqaure 和 Rectangle 对象,并在二者上调用新方法。
class Shape():
def __init__(self,word):
self.word = word
def what_am_i(self):
print("I am a shape")
shape = Shape(1)
shape.what_am_i()
4.创建一个叫 Horse 的类,以及一个叫 Rider 的类。使用组合,表示一批有骑手的马。
class Horse():
def __init__(self,
name,
breed,
owner):
self.name = name
self.breed = breed
self.owner = owner
class Rider():
def __init__(self,
name):
self.name = name
ren = Rider("Bill")
ma = Horse("Job",
"black horse",
ren)
print(ma.owner.name)