用更复杂的类型替换内置类型。蟒蛇

时间:2012-01-04 13:23:38

标签: python

我想创建一个内置类型set的替换类,它可以像set一样构造。不能使用继承,因为删除了一些函数以触发method not found异常。此类还用于查找可能存在内置python集合类型的隐式类型转换的位置。

class SetFacade:

    def __init__(self, iterable):
        self.lst = list(iterable)

    # other allowed member functions...

这个构造函数定义的问题是,我不能在没有参数的情况下调用构造函数SetFacade()

如何创建一个与内置集完全相同的构造函数?

因此必须允许

  • SetFacade([a,c,b])
  • SetFacade([])
  • SetFacade()

3 个答案:

答案 0 :(得分:4)

完全定义 ...

创建类似集合的类的最佳方法是从collections.Set派生。您需要实施__len____iter____contains__

为了能够添加元素,请从collections.MutableSet派生,并实施adddiscard

答案 1 :(得分:2)

继承自set

>>> class SetFacade(set):
...     pass
...
>>> SetFacade([1,2,3,4])
SetFacade([1, 2, 3, 4])
>>> SetFacade([1,2,3,3])
SetFacade([1, 2, 3]

答案 2 :(得分:1)

如果你想要一个空的构造函数......

class SetFacade:

def __init__(self, iterable=None):
    if iterable is None: 
         iterable = []
    self.lst = list(iterable)