在 python 中,frozenset 的子类的 __init__ 方法抛出 TypeError of arguments number
In python, frozenset's subclass's __init__ method throw TypeError of arguments number
class 的 __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
frozenset.__init__
不接受额外的参数,因为你不能修改 frozenset
创建后。 (事实上,frozenset
根本没有定义 __init__
;它只是使用从 object
继承的 __init__
。)你传递给 frozenset
的可迭代对象被 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
class 的 __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
frozenset.__init__
不接受额外的参数,因为你不能修改 frozenset
创建后。 (事实上,frozenset
根本没有定义 __init__
;它只是使用从 object
继承的 __init__
。)你传递给 frozenset
的可迭代对象被 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