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

本文介绍了Python面向对象编程的四大支柱——继承、方法覆盖、组合,并提供了挑战练习,包括创建Rectangle和Square类计算周长,实现Square类改变边长功能,设计Shape基类以及运用组合实现Horse和Rider类的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象多态继承方法

继承

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值