class object:
""" The most base type """
...
@staticmethod # known case of __new__
def __new__(cls, *more): # known special case of object.__new__
""" Create and return a new object. See help(type) for accurate signature. """
pass
...
这里的__new__方法很奇怪,下面不是第一个参数还绑定了类(也就是源对象object自身)吗?
我的问题有几个:
- 为什么不是类方法?
- 这是个静态方法装饰器的特例吗?
- 除了object里面,还有别的地方这么用吗?
期待大家解答
想通了,现列出个人的看法
作为python的源对象,object是所有类对象的祖先(base)包括另一个源对象type。其实__new__方法的第一个参数只是恰好设置成了cls,并非要绑定某个实例对象,所以可以这么回答
需要补充的是,源对象类型的实例也是类,是可以进一步实例化的,常常作为某些框架的基础数据类型描述符,可以进行强制类型检查,比如django的ORM的ModelBase,作为metaclass被所有model继承,涉及元编程的一些东西
附上官方文档的解释,以及stackoverflow一些对这个东西的讨论,很清晰,看来还是多看官方文档更有用
1.documentation
2.StackOverflow的讨论