在 class 对象上实现 __contains__ 方法

Implement __contains__ method on class object

我正在尝试编写一个class,其主要目的是封装,我希望它是单个实例。

class ACN(object):
    @classmethod
    def get_acn_certs(cls):
        pass

    @classmethod
    def get_suppporting_cert(cls, domains):
        pass

    @classmethod
    def __contains__(cls, item):
        return True    
3 in ACN

当我 运行 上面的脚本时,它在最后一行给出了以下错误。 我怎样才能在这里实现__contains__方法

3 in ACN TypeError: argument of type 'type' is not iterable

命令“ACN 中的 3”将不起作用,因为您已经声明了一个 class 但没有创建它的实例。 如果你想创建一个 class 的单一实例,我邀请你阅读一些关于 Singleton pattern 的内容。 下面是 Singleton pattern on python 的更多信息。 然后,您将能够将 'get_instance()' 之类的方法用于局部变量并使用它。 当您从 class 创建对象时,它会自动继承对象 class 并具有 contains 方法。我很想更好地理解您为什么需要它?

Magicmethods 仅在对象的 class 上查找(将它们声明为 class 方法不会在此处改变任何内容),因此当您执行 3 in ACN、python在ACN(元class)的class上搜索__contains__(或__getitem__)方法,这是内置的type class。如果你想使用 ACN class 作为实例并使用 magicmethods,你必须使用自定义 metaclass 并在其上定义 magicmethods:

class ACNType(type):
    def __contains__(cls, item):
        return True   


class ACN(metaclass=ACNType):
   # your other methods here