You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过一个类的方法修改另一个类的属性值?(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:50:51