Chr*_*roa 6 python dictionary iterator overriding python-3.x
我正在尝试dict在 Python 中创建一个类似的类。
当你创建一个类时,你有一些方法告诉 Python 如何创建一个内置类。例如,__int__如果用户int()在类的实例上使用,覆盖该方法会告诉 Python 返回什么。对于__float__. 您甚至可以通过覆盖该__iter__方法来控制 Python 如何生成类的可迭代对象(这可以帮助 Python生成类的lists 和tuples)。我的问题是你如何告诉 Python 如何制作dict你的自定义类?没有什么特别的__dict__方法,你会怎么做呢?我想要类似以下内容:
class Foo():
def __dict__(self):
return {
'this': 'is',
'a': 'dict'
}
foo = Foo()
dict(foo) # would return {'this': 'is', 'a': 'dict'}
Run Code Online (Sandbox Code Playgroud)
我试过让类继承自dict,但由于子类试图继承自dictand type,因此在代码中稍后会引发错误,因此继承自dict是不可能的。有没有其他方法可以做到?
此外,我已经覆盖了该__iter__方法,以便它返回一个dict_keyiterator对象(iter()在 a 上使用时返回的内容dict),但它似乎仍然无法正常工作。
dict可以使用可迭代的对进行调用,因此如果您设计__iter__返回可迭代的元组,则您的示例将按照您的意愿工作:
class Foo:
def __iter__(self):
yield from {
'this': 'is',
'a': 'dict'
}.items()
dict(Foo())
{'a': 'dict', 'this': 'is'}
Run Code Online (Sandbox Code Playgroud)
如果您希望您的类表现得像 python 字典,因为迭代实例会迭代其键,您可以实现abc.Mapping.
您可以通过实现__getitem__、__iter__、 和并__len__继承、、、、、、、、 和来实现此目的。abc.Mapping__getitem____iter____len__ __contains__keysitemsvaluesget__eq____ne__
| 归档时间: |
|
| 查看次数: |
3162 次 |
| 最近记录: |