在學習Python的數據模型時,我正在玩使用__new__
方法從現有對象創建對象。下面是一些例子創建不同類型的新對象:來自現有對象的Python對象使用__new__
x = 2; print type(x).__new__(x.__class__)
x = {}; print type(x).__new__(x.__class__)
x = [1,2]; print type(x).__new__(x.__class__)
x = 2.34; print type(x).__new__(x.__class__)
x = '13'; print type(x).__new__(x.__class__)
x = 1.0j; print type(x).__new__(x.__class__)
x = True; print type(x).__new__(x.__class__)
x = (1,2); print type(x).__new__(x.__class__)
但是,下面的三個實驗給我的錯誤:
x = None; print type(x).__new__(x.__class__)
x = lambda z: z**2; print type(x).__new__(x.__class__)
x = object; print type(x).__new__(x.__class__)
的錯誤(分別)爲:
TypeError: object.__new__(NoneType) is not safe, use NoneType.__new__()
TypeError: Required argument 'code' (pos 1) not found
TypeError: type() takes 1 or 3 arguments
這三個例子爲什麼不起作用? (注意:對於lambda
示例,似乎我在調用__new__
方法時必須傳入代碼片段,但我不知道如何執行此操作。)我正在使用Python 2.6。
請注意,我認識到這不一定是您想要在真實代碼中創建新對象的方式,但我的目的不切實際,而是理解底層對象方法的工作原理。
什麼樣的錯誤表明它對我們有利。 –
添加的消息,羅希特。感謝您的建議。 – rlandster