[英]Why this class constructor raises this error?
上這堂課:
class A(frozenset):
def __init__(self, *args):
frozenset.__init__(self, *args)
執行A(range(2))
導致以下錯誤:
Traceback (most recent call last):
File "<pyshell#65>", line 1, in <module>
A(range(2))
File "<pyshell#60>", line 3, in __init__
frozenset.__init__(self, *args)
TypeError: object.__init__() takes no parameters
同時, frozenset(range(2))
起作用,並且如果我從set
繼承A
,則A(range(2))
也起作用。
如果我將A的構造函數0或多個參數傳遞給A,則它應該正常工作(參數為0時將創建一個空集,參數為2個或多個將引發TypeError: A expected at most 1 arguments, got 2
)。
實際上,當子類化frozenset
以便從傳遞的iterable(作為參數)創建新的Frozenset時,實際上需要重寫__new__
方法(不是__init__
, __init__
方法將接受__new__
方法生成並返回的實例):
class A(frozenset):
def __new__(cls, *args):
self = super().__new__(cls, *args)
return self
print(A(range(2)))
print(A(range(2)).__class__.__bases__)
樣本輸出:
A({0, 1})
(<class 'frozenset'>,)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.