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

如何在Python中实现类似position.x的子变量?

实现支持点语法访问且可整体输出的属性类

要实现你要的效果,最直接的方式是创建一个自定义辅助类来封装position的属性,既支持点语法访问单个值,又能通过重写字符串方法实现整体输出,完全不需要函数或字典:

class Position:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
    
    def __str__(self):
        # 控制打印时的整体输出格式
        return f"{self.x}, {self.y}, {self.z}"
    
    # 可选:让交互式环境下的显示和打印一致
    __repr__ = __str__

class Object:
    def __init__(self, x, y, z):
        # 初始化Position实例作为position属性
        self.position = Position(x, y, z)

# 测试代码
obj = Object(5, 3, 1)
print(obj.position)  # 输出:5, 3, 1
print(obj.position.y)  # 输出:3

关键说明:

  • Position类专门负责封装x、y、z三个属性,通过实例化它,自然就能用obj.position.x这种点语法访问单个值。
  • 重写__str__方法是核心:当你直接打印obj.position时,Python会调用这个方法返回你想要的格式字符串,实现“整体返回值”的需求。

如果还想让position支持类似列表的索引访问(比如obj.position[1]取y值),可以给Position类加上__getitem__方法:

class Position:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
    
    def __str__(self):
        return f"{self.x}, {self.y}, {self.z}"
    
    def __getitem__(self, index):
        # 映射索引到对应属性:0→x,1→y,2→z
        return (self.x, self.y, self.z)[index]

# 新增测试
print(obj.position[1])  # 输出:3,和obj.position.y效果一致

内容的提问来源于stack exchange,提问作者Madlirex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:13:14