《python无师自通》第十三章 面向对象编程的四大支柱

抽象多态继承方法

继承

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)

发布了42 篇原创文章 · 获赞 0 · 访问量 262

猜你喜欢

转载自blog.csdn.net/qq_43169516/article/details/103970173
今日推荐