如何通过一个类的方法修改另一个类的属性值?(Door与Person示例)
实现人物开关门的面向对象方案
核心思路是让Person类持有Door类的实例,通过调用Door类对外暴露的方法来修改门的状态,同时遵循面向对象的封装原则,避免直接操作私有属性。
1. 定义Door类
将门的状态封装为私有属性,并提供专门的开门、关门方法来控制状态变更:
class Door: def __init__(self): # 初始状态为关闭,用下划线标记为私有属性 self._status = "closed" def open_door(self): self._status = "open" print("门已打开") def close_door(self): self._status = "closed" print("门已关闭") def get_status(self): # 提供获取状态的方法 return self._status
2. 定义Person类并关联Door
在Person初始化时传入要关联的Door实例,通过自身方法调用门的操作方法:
class Person: def __init__(self, door): # 绑定要操作的门 self.door = door def open_the_door(self): # 调用门的开门方法 self.door.open_door() def close_the_door(self): # 调用门的关门方法 self.door.close_door()
3. 测试功能
通过实例化对象验证人物开关门的操作:
# 创建一扇门 front_door = Door() print(f"初始门状态: {front_door.get_status()}") # 创建人物并关联这扇门 alice = Person(front_door) # 人物执行开门操作 alice.open_the_door() print(f"开门后状态: {front_door.get_status()}") # 人物执行关门操作 alice.close_the_door() print(f"关门后状态: {front_door.get_status()}")
设计优势
- 封装性:门的状态修改逻辑由自身管控,后续若要添加状态校验(比如门已打开时拒绝重复开门),只需修改
Door类的方法,无需改动Person代码。 - 灵活性:一个人物可以操作多扇门,一扇门也可以被多个人物操作,关联关系灵活可控。
内容的提问来源于stack exchange,提问作者flyerz
相关产品推荐
相关产品推荐

