在学习 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。
请注意,我意识到这不一定是您希望在实际代码中创建新对象的方式,但我的目的并不实际,而是要了解低级对象方法是如何工作的。