簡體   English   中英

為什么這個類構造函數會引發此錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM