小编vko*_*kis的帖子

为什么Python在实例创建时调用实例方法__init __()而不是调用类提供的__init __()?

我正在覆盖__new__()类的方法以返回具有特定__init__()集合的类实例.Python似乎调用类提供的__init__()方法而不是特定于实例的方法,尽管Python文档在

http://docs.python.org/reference/datamodel.html

说:

典型的实现通过使用带有适当参数的super(currentclass,cls).__ new __(cls [,...])调用超类的__new __()方法创建类的新实例,然后在返回之前根据需要修改新创建的实例它.

如果__new __()返回一个cls实例,那么新实例的__init __()方法将被调用,如__init __(self [,...]),其中self是新实例,其余参数与传递给的相同. __新__().

这是我的测试代码:

#!/usr/bin/env python

import new

def myinit(self, *args, **kwargs):
    print "myinit called, args = %s, kwargs = %s" % (args, kwargs)


class myclass(object):
    def __new__(cls, *args, **kwargs):
        ret = object.__new__(cls)

        ret.__init__ = new.instancemethod(myinit, ret, cls)
        return ret

    def __init__(self, *args, **kwargs):
        print "myclass.__init__ called, self.__init__ is %s" % self.__init__
        self.__init__(*args, **kwargs)

a = myclass()
Run Code Online (Sandbox Code Playgroud)

哪个输出

$ python --version
Python 2.6.6 …
Run Code Online (Sandbox Code Playgroud)

python methods object instances

12
推荐指数
2
解决办法
1002
查看次数

标签 统计

instances ×1

methods ×1

object ×1

python ×1