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

Python:获取对象多个属性的简洁语法实现方案

这个问题我太懂了——重复敲对象名确实烦得很!刚好Python有几种简洁的写法能完美解决你的痛点,分两种场景给你拆解:

场景1:你的myObj是字典(或实现了__getitem__的类)

先把要提取的属性名(键)整理成一个元组,然后只需要写一次myObj就能生成目标元组:

# 先定义要提取的键集合
target_keys = ('one', 'five', 'six', 'seven', 'nine', 'ten', 'eleven', 'fifteen', 'twenty')
# 用生成器表达式生成元组,只写一次myObj
myTuple = tuple(myObj[key] for key in target_keys)

如果担心某些键可能不存在,想用默认值替代,可以换成myObj.get配合map:

# 不存在的键会返回None,也可以指定默认值比如myObj.get(key, default_val)
myTuple = tuple(map(myObj.get, target_keys))

场景2:你的myObj是自定义类实例(用.访问属性,比如myObj.one)

这种情况用operator.attrgetter会更优雅,直接一次性批量提取属性并返回元组:

from operator import attrgetter

# 传入所有要提取的属性名,生成一个 getter 函数
get_target_attrs = attrgetter('one', 'five', 'six', 'seven', 'nine', 'ten', 'eleven', 'fifteen', 'twenty')
# 只需要调用一次getter,传入对象即可得到元组
myTuple = get_target_attrs(myObj)

进阶:模拟你期望的myObj[('key1', 'key2')]语法

如果你特别想要这种直观的写法,可以给自定义类添加__getitem__方法,让它支持接收元组作为索引:

class CustomObj:
    def __init__(self):
        self.one = 1
        self.five = 5
        self.six = 6
        # ... 其他属性
    
    def __getitem__(self, keys):
        # 如果传入的是元组,就批量提取属性返回元组
        if isinstance(keys, tuple):
            return tuple(getattr(self, key) for key in keys)
        # 单个属性的情况正常返回
        return getattr(self, keys)

# 现在就能用你想要的写法了!
myObj = CustomObj()
myTuple = myObj[('one', 'five', 'six')]

不过如果是原生字典的话,没法修改它的__getitem__逻辑,所以前面两种方法会更实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:56:33