gpt4 book ai didi

可听写类的 Python 习语?

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:01 26 4
gpt4 key购买 nike

我想做这样的事情:

class Dictable:
def dict(self):
raise NotImplementedError

class Foo(Dictable):
def dict(self):
return {'bar1': self.bar1, 'bar2': self.bar2}

有没有更pythonic的方法来做到这一点?例如,是否可以重载内置转换 dict(...)?请注意,我不一定要返回 Foo 的所有成员变量,我宁愿让每个类决定返回什么。

谢谢。

最佳答案

Pythonic 方式取决于您想做什么。如果您的对象本身不应该被视为映射,那么 dict 方法就完全没问题,但您不应该“重载”dict 来处理可听写表。您是否需要基类取决于您是否要执行 isinstance(x, Dictable);请注意,hasattr(x, "dict") 的用途几乎相同。

如果类键到值的概念映射,那么实现 Mapping协议(protocol)似乎是合适的。即,您将实现

  • __getitem__
  • __iter__
  • __len__

并继承自 collections.Mapping 以获取其他方法。然后你就可以免费得到 dict(Foo()) 了。示例:

class Foo(Mapping):
def __getitem__(self, key):
if key not in ("bar1", "bar2"):
raise KeyError("{} not found".format(repr(key))
return getattr(self, key)

def __iter__(self):
yield "bar1"
yield "bar2"

def __len__(self):
return 2

关于可听写类的 Python 习语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11181635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com