在Counter类中实现__add__方法的方式如何?

时间:2019-05-29 11:25:06

标签: python python-3.x

我想在Counter类中实现 add 方法。无需导入计数器。

我有点想法,如代码所示,但这总是给我一个错误。

class MyCounter:
    def __init__(self, s=None):
        self.q = {}
        for x in s:
            self.add(x)
    def __repr__(self):
        return str(self.q)
    def add (self,x):
        if x in self.q:
            self.q[x] = self.q[x] + 1
        else:
            self.q[x]=1
    def __add__(self, args):
        new_dict = self.q
        for x in new_dict:
            if x in args:
                u=args.get(x)
                new_dict[x] = new_dict[x]+ u
            else:
                new_dict[x]=1 

这就是我想要的

a= MyCounter("hahahahha")
a+ MyCounter("hahhahahah")

new_dict = {'h': 11, 'a': 8}

我尝试的错误代码

TypeError:“ MyCounter”类型的参数不可迭代

1 个答案:

答案 0 :(得分:0)

您的行:

if x in args:

本质上是:

if x in MyCounter("hahhahahah"):

但是MyCounter不支持in运算符。

您可能想对q进行检查:

if x in args.q:

您还可以为您的类实现in运算符(使用__contains__方法),或者直接为dict的子类实现(这就是collections.Counter的作用)。 / p>

您在这里也遇到同样的问题:

u=args.get(x)

MyCounter没有get()方法,您想使用此方法:

u=args.q.get(x)