![](/img/trans.png)
[英]python: calling super().__init__ too early in the __init__ method?
[英]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
>>
塊 1 中的代碼在 Python 2 中會中斷,但會在 Python 3 中通過。塊 2 中的代碼將通過這兩者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.