我遇到了以下代碼,看起來很簡單,但對我來說有點黑魔法:
class FileItem(dict):
def __init__(self, name):
dict.__init__(self, name=name)
x = FileItem("test")
print(x)
{'name': 'test'}
當我這樣做時,似乎也在發生同樣的事情:
print(dict.__call__(name="test"))
{'name': 'test'}
我認為至少__init___在第二個示例中也必須呼叫該方法,對嗎?有沒有辦法列印用于創建物件的所有 dunder 方法?
根據我現在的理解,它似乎是:
__new____init__
可選的:__call__
誰能幫助我如何真正看到這一點?
uj5u.com熱心網友回復:
__call__只是物件創建的間接部分。你的例子并沒有完全按照你的想法做——它沒有呼叫dict.__call__. x()僅當您執行where xis a dictinstance時才會呼叫它。
dict恰好是一個物件本身,型別為class。該class型別有一個__call__方法,允許您撰寫x = dict(). 該class.__call__方法觸發物件創建。
物件創建涉及__new__和__init__。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/455828.html
下一篇:從可選的嵌套物件中提取值
