📅  最后修改于: 2023-12-03 15:42:20.133000             🧑  作者: Mango
本题为Sudo GATE 2020 Mock III(2019 年 1 月 24 日)第27题,题目要求我们基于给出的门类结构体实现门的开关机制。
门类有三个属性:
门类有两个方法:
我们需要实现两个子类来扩展门类。
该类继承自门类,增加了一个密码并且需要通过密码才能开门。在门状态改变前将要求输入密码,如果输入密码错误则不改变门状态。密码默认为"password"。
该类还增加了一个方法:
该类继承自门类,增加了一个属性,表示门的自动开启和关闭状态。如果状态为1则代表门处于自动开启状态;如果状态为2则代表门处于自动关闭状态。开启和关闭状态默认为0。
该类有两个方法:
任务要求我们基于给出的门类结构体实现门的开关机制。我们将分两步进行操作。首先,我们利用OOP的继承机制,分别制定"DoorWithPassword"和"AutomaticDoor"两个子类,以扩展门类。代码如下:
class Door:
def __init__(self, name):
self.name = name
self.state = 0
self.logs = []
def open(self):
self.state = 1
self.logs.append("门" + self.name + "开了")
def close(self):
self.state = 0
self.logs.append("门" + self.name + "关了")
class DoorWithPassword(Door):
def __init__(self, name, password="password"):
super().__init__(name)
self.password = password
def open(self):
if self.password == input("请输入密码:"):
super().open()
def change_password(self, new_password):
self.password = new_password
class AutomaticDoor(Door):
def __init__(self, name):
super().__init__(name)
self.auto_state = 0
def set_auto_open(self):
self.auto_state = 1
print("门" + self.name + "已开启自动开启功能")
def set_auto_close(self):
self.auto_state = 2
print("门" + self.name + "已开启自动关闭功能")
在代码实现的第二步,我们调用Door类以及它的子类,使用open()和close()方法,完成门的开关操作。同时,我们还可以调用change_password()、set_auto_open()和set_auto_close()方法,来完成门密码的重设和门自动开启关闭操作。
至此,我们完成了基于给出的门类结构体实现门的开关机制的任务。