在类对象上实现__contains__方法

时间:2019-01-02 08:59:44

标签: python-3.x python-3.4

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

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

2 个答案:

答案 0 :(得分:2)

仅在对象的类上查找魔术方法(在这里将它们声明为类方法并没有改变任何内容),因此,在执行3 in ACN时,python搜索__contains__(或{{ 1 {}})类(元类)上的方法,它是内置的__getitem__类。如果要将ACN类用作实例并使用魔术方法,则必须使用自定义元类并在其上定义魔术方法:

ACN

答案 1 :(得分:1)

命令“ ACN中的3”将不起作用,因为您已经声明了一个类但未创建它的实例。 如果您想创建一个将成为单个实例的类,我邀请您阅读有关Singleton pattern的内容。 这是Singleton pattern on python的更多信息。 然后,您将可以在本地变量中使用类似“ get_instance()”的方法并使用它。 当您从类中创建对象时,它会自动继承Object类并具有 contains 方法。我想更好地了解您为什么需要它?