覆盖Python的“in”操作员?

发布于 2024-08-20 04:46:35 字数 327 浏览 7 评论 0原文

如果我在 Python 中创建自己的类,我应该定义什么函数才能允许使用 in 运算符,例如

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...

另请参阅 __contains__ 是做什么的,什么可以调用 __contains__ 函数,针对有关 __contains__ 做什么的相应问题。

If I am creating my own class in Python, what function should I define so as to allow the use of the in operator, e.g.

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...

See also What does __contains__ do, what can call __contains__ function for the corresponding question about what __contains__ does.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

°如果伤别离去 2024-08-27 04:46:35

更完整的答案是:

class MyClass(object):

    def __init__(self):
        self.numbers = [1,2,3,4,54]

    def __contains__(self, key):
        return key in self.numbers

在这里,当询问 54 是否在 m 中时,您会得到 True

>>> m = MyClass()
>>> 54 in m
True  

请参阅 有关重载 __contains__ 的文档。

A more complete answer is:

class MyClass(object):

    def __init__(self):
        self.numbers = [1,2,3,4,54]

    def __contains__(self, key):
        return key in self.numbers

Here you would get True when asking if 54 was in m:

>>> m = MyClass()
>>> 54 in m
True  

See documentation on overloading __contains__.

挽袖吟 2024-08-27 04:46:35

拥有所需逻辑的另一种方法是实现 __iter__

如果你没有重载 __contains__ python 会使用 __iter__ (如果它重载了)来检查你的数据结构是否包含指定的值。

Another way of having desired logic is to implement __iter__.

If you don't overload __contains__ python would use __iter__ (if it's overloaded) to check whether or not your data structure contains specified value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文