python - 为类(class)定制双星运营商?

标签 python class python-3.x magic-methods

如何实现自定义双星运算符 (**) 进行解包,类似于 __iter__ 与单星运算符 (*) 的工作方式)?

例如:

class PlayerManager(object):

    def __init__(self, players=None):
        self.players = players or []

    # Made up method to support ** operator
    def __dict_iter__(self):
        for player in self.players:
            yield get_steamid(player), player

def print_players(**players):
    print(players)

player_manager = PlayerManager([list, of, players])
print_players(**player_manager)

输出:

{
    'STEAM_0:0:02201': <Player object at 0x0000000000>,
    'STEAM_0:0:10232': <Player object at 0x0000000064>,
    'STEAM_0:0:73602': <Player object at 0x0000000128>
}

最佳答案

正如@ShadowRanger 所说,实现映射。这是一个例子:

from collections.abc import Mapping

class Foo(Mapping):
    def __iter__(self):
        yield "a"
        yield "b"

    def __len__(self):
        return 2

    def __getitem__(self, item):
        return ord(item)

f = Foo()

print(*f)
print(dict(**f))

程序输出:

a b
{'a': 97, 'b': 98}

关于python - 为类(class)定制双星运营商?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33402220/

相关文章:

python - 向所有客户端发送消息

CSS - 公共(public)类

javascript - 将 html 类的属性与 javascript 进行比较

python - 使用 Python 将 latex 代码转换为图像(或其他可显示格式)

python - 如何获得 Python 3.7 新的数据类字段类型?

javascript - jQuery - 仅从元素获取第一类

python-3.x - 当我使用 fastapi 运行 aiogram 时,FSM 不起作用

python - 发布者等待消费消息,同时它应该做这两件事(发布和订阅来自订阅者的回复)。)

Python:使用 Pandas 创建多列系列

python启动包含暂停命令的批处理文件,抛出异常