gpt4 book ai didi

python - 我可以让我的类(class)在“关键字”中使用 Python '"吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:38 24 4
gpt4 key购买 nike

我即将开始学习 Python 的第 5 个小时左右,到目前为止,我对它的功能印象深刻。我目前的努力是对 Stream 类做一个简短的尝试,其代码如下:

class Stream:

"""A Basic class implementing the stream abstraction. """

def __init__(self,data,funct):
self.current = data
self._f = funct

def stream_first(self):
"""Returns the first element of the stream"""
return self.current

def stream_pop(self):
"""Removes and returns the first element of the stream. """
temp = self.current
self.current = self._f(self.current)
return temp

在那里取得了一定的成功,我尝试创建一个 BoundedStream 类,它的行为基本上与无界类类似,只是在某一时刻它会用完元素。我现在的问题是,看到任何这样的 Bounded Stream 都有一些有限数量的元素,应该可以迭代它们。如果我使用的是显式列表,我可以使用 Python 的 in 关键字和 for 循环来干净地完成此操作。我想为我自己的类(class)保持这种清洁。是否有一些我可以实现的方法或任何其他语言功能可以让我这样做?非常感谢您向菜鸟提供的任何答案或其他帮助!

-大卫

附言

对于那些想知道的人来说,Bounded Stream 的插入力是我尝试了内置的 range 函数,但是 Python 声称我想要查看的范围太大了。为了提高内存效率,我转向了 Streams。

最佳答案

对于 for x in object 中的迭代,您需要提供一个 __iter__ 方法,它将返回一个新的迭代器。

迭代器是具有方法 next()(Python 2)或 __next__(Python 3)的对象,它返回下一个元素或引发 StopIteration 没有更多元素时的异常。 (迭代器还应该有一个返回自身的方法 __iter__。)

Tip: You don't often need to code an iterator by yourself; the simplest way to implement __iter__ on a class is to make it a generator function or to return a generator expression from it (all generators are iterators). Also you can just return an iterator obtained from another object; the iter builtin is helpful here.


为了测试if x in object,你需要提供一个__contains__方法。

进一步阅读:Python data model - emulating container types

关于python - 我可以让我的类(class)在“关键字”中使用 Python '"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415939/

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