簡體   English   中英

'super().__init__()' 在 python 3.x 中是什么意思?

[英]What does 'super().__init__()' mean in python 3.x?

這兩個代碼示例有什么區別?

1:

class SubType(type):
    def __init__(cls, name, bases, dct):
        super().__init__(name, bases, dct)

2:

class SubType(type):
    def __init__(cls, name, bases, dct):
        pass

在一種情況下,您正在為所有類(即類型)調用基類的__init__方法 - 而在另一種情況下則不是。

由於此方法默認不執行任何操作,因此兩個列表之間實際上沒有區別。

(真正執行類創建魔法的是元類__new__方法 - 在 Python 中創建新對象而不調用原生基元類的__new__方法是__new__

在 python 3.x 中,它意味着調用超類(即類型)的 __init__ 方法(​​好像它是當前類 SubType 的方法,因為當前類是超類的派生類)。

與在 Python 2.x 中調用 super(type, self).__init__() 相同

例如:

class type:
       def __init__(self, a):
           print(a)

 class SubType(type):
       def __init__(self, a):
           super().__init__(a)

>> obj = SubType(2) 
2
>>

Super 讓您避免顯式引用基類,這很好。 但主要優點是多重繼承,各種有趣的事情都可能發生。 如果您還沒有,請參閱super 上標准文檔

塊 1 中的代碼在 Python 2 中會中斷,但會在 Python 3 中通過。塊 2 中的代碼將通過這兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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