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

用更复杂的类型替换内置类型。python,python,Python,我想创建一个内置类型集合的替换类,它可以像集合一样构造。不能使用继承,因为某些函数被删除以触发method not found异常。此类还用于查找可能存在内置python集合类型的隐式类型转换的位置 class SetFacade: def __init__(self, iterable): self.lst = list(iterable) # other allowed member functions... 这个构造函数定义的问题是,我不能在没有参数的

我想创建一个内置类型集合的替换类,它可以像集合一样构造。不能使用继承,因为某些函数被删除以触发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 从集合继承:


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

class SetFacade:

def __init__(self, iterable=None):
    if iterable is None: 
         iterable = []
    self.lst = list(iterable)
准确地定义

创建类似集合的类的最佳方法是从中派生。您需要实现uuu len uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


若要添加元素,请改为从collections.MutableSet派生,并实现添加和放弃。

这一切的目的是覆盖set的所有函数,因为其中许多函数依赖哈希。@Alex“all”!='许多'。考虑定制计划集元素的哈希方法,而不是定制整个SET类。这与类的确切行为无关,而与构造函数有关。是找到写得不好的代码,这可能会触发隐式转换。@Alex:是找到写得不好的代码,这可能会触发隐式转换。请在问题中实际这样说。不要在评论中隐藏重要事实。@S.Lott:我改进了这个问题,尽管我已经有了答案。我大体上同意这一点,但是上面的评论是离题的,因为它不是关于构造函数的。你不使用hash builtin的确切意思是什么?请注意,你至少应该从object继承。@larsmans,我不希望set隐式调用元素。\关于我的元素,非常感谢你,我没有考虑获得重载函数的默认参数。虽然我需要承认这是一个很简单的问题。我编辑了代码,因为它包含了Python程序中最微妙、最难找到的错误原因之一——如果列表用作方法的默认参数,它只创建一次——类的所有实例都将与原始代码共享同一个列表对象。
class SetFacade:

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