首页 > 解决方案 > 在python中,frozenset的子类的__init__方法抛出参数编号的TypeError

问题描述

该类的__init__方法有 3 个参数,但是当我用 3 个参数实例化它时,它会抛出一个错误,它需要 1 个参数。我无法理解。

class ArrObj(frozenset):
    def __init__(self, elem_list, elem_count, self_count):
        super(ArrObj, self).__init__(elem_list)  # Enums, ArrObj, race_id
        self.elem_count = elem_count
        self.self_count = self_count
        assert self_count > 0


if __name__ == '__main__':
    a = ArrObj(['a', 'b', 'c'], {'a':1, 'b':2, 'c':3}, 8)
Traceback (most recent call last):
  File "G:/pycharm-projects/new_keyinfo/verify_treekeys.py", line 34, in <module>
    a = ArrObj(['a', 'b', 'c'], {'a':1, 'b':2, 'c':3}, 8)
TypeError: ArrObj expected at most 1 arguments, got 3

标签: pythonpython-2.7frozenset

解决方案


frozenset.__init__不需要额外的参数,因为你不能frozenset在它被创建后修改它。(事实上​​,frozenset根本没有定义__init__;它只是使用__init__it 继承自object。)您传递给的可迭代frozenset对象被 by 消耗frozenset.__new__

class ArrObj(frozenset):
    def __new__(cls, elem_list, elem_count, self_count):
        # May as well assert this before you do any more work
        assert self_count > 0

        obj = super().__new__(cls, elem_list)
        obj.elem_count = elem_count
        obj.self_count = self_count
        return obj

推荐阅读