Python - 无法重载工作

标签 python overloading

总之,我已经这样做了几天了,但仍然无法让这种重载发挥作用。

Error:
    setA: {-10,-8,3,5,10,17,20}
    intSet.len(setA):
    TypeError: __len__() takes exactly 2 arguments (1 given)

代码:

class intSet(object):
    """An intSet is a set of integers
    The value is represented by a list of ints, self.vals.
    Each int in the set occurs in self.vals exactly once."""

    def __init__(self):
        """Create an empty set of integers"""
        self.vals = []

    def insert(self, e):
        """Assumes e is an integer and inserts e into self""" 
        if not e in self.vals:
            self.vals.append(e)

    >>>>>> more methods left out for brevity <<<<<<<<<<

    def __len__(self, s):
        """ Returns the length of the string provided"""
        return len(s)

任何帮助将不胜感激...

最佳答案

__len__ 魔术方法不接受额外的参数。你的代码应该是

class IntSet(object):
"""An intSet is a set of integers
The value is represented by a list of ints, self.vals.
Each int in the set occurs in self.vals exactly once."""

def __init__(self):
    """Create an empty set of integers"""
    self.vals = []

>>>>>> more methods left out for brevity <<<<<<<<<<

def __len__(self):
    """Returns the number of elements in this set"""
    return len(self.vals)

然后在您的代码中以这种方式使用它

myset = IntSet()
print 'My set contains ', len(myset)
myset.insert(9)
myset.insert(10)
print 'My set contains ', len(myset)
myset.insert(9)
print 'My set contains ', len(myset)

关于Python - 无法重载工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31572503/

相关文章:

c++ - 编译器如何处理仿函数中重载的函数调用运算符?

c++ - 为一组模板参数重载方法的递归继承

c++ - 在 C++ 中双重重载 istream 和 ostream 运算符

python - 替换 IPython 菜单图标

java - 不同类型集合的集合重载

c++ - 是否为这个重载运算符调用了转换构造函数? (C++)

python - 如何访问和修改 LabTestRepository 类中的 __list_of_hospital_lab_test_ids?

python - array.array() 可以用来定义二维数组吗?

python - 有没有办法在 win10toast python 库上禁用通知声音?

python - 无法在python中使用pip安装visvis