1、应用:房屋存放家具
定义房间类,能够存储房间的大小和房间里的所有家具,并且要能够添加和移除家具;
家具定义为抽象类,床和桌子进行继承设计。
from abc import ABC, abstractmethod
class Furniture(ABC):
@abstractmethod
def __init__(self, name, size):
self.name = name
self.size = size
def __str__(self):
return self.name
class Bed(Furniture):
def __init__(self, name, size):
super().__init__(name, size)
class Table(Furniture):
def __init__(self, name, size):
super().__init__(name, size)
class Room:
def __init__(self, size):
self.size = size
self.furniture = []
def add_furniture(self, item):
if self.get_free_space() >= item.size:
self.furniture.append(item)
# self.size-=item.size
print(f"{item.name} 已添加到房间。")
else:
print(f"房间空间不足,无法添加 {item.name}。")
def remove_furniture(self, item):
if item in self.furniture:
self.furniture.remove(item)
# self.size += item.size
print(f"{item.name} 已从房间移除。")
else:
print(f"{item.name} 不在房间中。")
def get_free_space(self):
used_space = sum(item.size for item in self.furniture)
return self.size - used_space
# 测试代码
bed = Bed("床", 3)
table = Table("桌子", 2)
room = Room(4)
room.add_furniture(bed)
room.add_furniture(table)
print("目前房间里的家具:")
for item in room.furniture:
print(item)
room.remove_furniture(bed)
print("目前房间里的家具:")
for item in room.furniture:
print(item)
from abc import ABC, abstractmethod
这是Python编程语言中的一段代码。在这段代码中,ABC
是一个抽象基类(Abstract Base Class)的类,abstractmethod
是一个装饰器(Decorator),用于声明抽象方法。
抽象基类是用来定义接口和行为规范的类,它本身不能被实例化。抽象方法是指在抽象基类中声明但没有具体实现的方法,具体的子类需要去实现这些抽象方法。
通过使用ABC
作为基类,并结合abstractmethod
装饰器,可以创建一个抽象基类,并声明其中的抽象方法。具体的子类可以继承这个抽象基类,并且必须实现父类中声明的抽象方法,否则将会报错。
这种抽象基类的机制可以帮助开发者在设计、组织和维护代码时,更好地遵循面向对象编程的原则,例如封装、继承和多态等。
上述代码定义了一个简单的家具类和房间类。Furniture
类是一个抽象基类,其中声明了一个抽象方法__init__
和一个非抽象方法__str__
。Bed
类和Table
类分别继承了Furniture
类,并且实现了父类中的__init__
方法。
Room
类表示一个房间,其中包含一个属性size
表示房间的总空间,以及一个列表furniture
用于存储放在房间中的家具。add_furniture
方法用于向房间中添加家具,如果空间足够则将家具加入列表;remove_furniture
方法用于从房间中移除家具;get_free_space
方法用于获取房间的剩余空间。
在测试代码中,创建了一个床和一个桌子的实例,并将它们依次添加到房间中。然后输出房间中的家具,再移除床并重新输出家具。可以看到,家具被正确地添加到房间中,并在移除后也被正确地从房间中删除。
这段代码简单地展示了如何使用抽象基类和继承来实现家具和房间之间的关系,并控制房间中的家具数量和空间。