理解类方法:方法调用错误

时间:2014-02-08 22:44:07

标签: python class python-3.x methods

在创建自己的类时,我无法理解方法的工作原理。

这是我的班级方法:

def compare_coll(self,coll_1, coll_2) -> None:
    '''  compares two collections of key words which are dictionaries, 
    <coll_1> and <coll_2>, and removes from both collections every word 
    that appears in both collection'''


    overlap = set(coll_1).intersection(set(coll_2))
    for key in overlap:
        del coll_1[key], coll_2[key]

我的类'Collection_of_word_counts'有一个实例变量,名为'counts',它存储一个字典,其中键是单词,值是它们的出现次数。初始化程序将读取txt文件中的单词,并将它们存储在self.counts中。

我不知道如何使用这种方法。我知道我正确实现了它。

>>> c1.compare_coll(c2)

产生

Traceback (most recent call last):
File "<string>", line 1, in <fragment>
builtins.TypeError: compare_coll() missing 1 required positional argument: 'coll_2'

>>> Collection_of_word_counts.compare_coll(c1,c2)

产生了同样的错误。

我不确定如何在shell中使用它。

1 个答案:

答案 0 :(得分:1)

您的compare_coll方法是实例方法,而不是类方法。按惯例称为self的实例方法的第一个参数始终是调用方法的类的实例(例如self == c1用于c1.compare_coll(c2)),因此您只需要提供另一个论点。尝试:

def compare_coll(self, other) -> None:
    overlap = set(self.counts).intersection(set(other.counts))
    for key in overlap:
        del self.counts[key], other.counts[key]

这适用于c1.compare_coll(c2)Collection_of_word_counts.compare_coll(c1, c2)

请注意,我已直接为方法中的两个实例引用了counts