我正在尝试编写一个主要目的是封装的类,并且希望它是单个实例。
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
答案 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 方法。我想更好地了解您为什么需要它?