Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未从\uu new中调用方法___Python_New Operator_Init - Fatal编程技术网

Python 未从\uu new中调用方法__

Python 未从\uu new中调用方法__,python,new-operator,init,Python,New Operator,Init,在下面的代码中,我试图理解init和new。我遇到的问题是从未调用过callBeforeInit()方法 请让我知道为什么它没有被调用,以及如何调用它 代码: class varargs: def __new__(cls): print("in object creation") callBeforeInit() return super(varargs, cls).__new__(cls) #return object.__new__(cl

在下面的代码中,我试图理解initnew。我遇到的问题是从未调用过callBeforeInit()方法

请让我知道为什么它没有被调用,以及如何调用它

代码

class varargs:

def __new__(cls):
    print("in object creation")
    callBeforeInit()
    return super(varargs, cls).__new__(cls)
    #return object.__new__(cls)

def __init__(self):
    print("in object indtansiation")

def callBeforeInit():
    print("called before init")

v = varargs()
in object creation
Traceback (most recent call last):
File "d:\python workspace\Varargs.py", line 15, in <module>
v = varargs()
File "d:\python workspace\Varargs.py", line 5, in __new__
callBeforeInit()
NameError: name 'callBeforeInit' is not defined
错误

class varargs:

def __new__(cls):
    print("in object creation")
    callBeforeInit()
    return super(varargs, cls).__new__(cls)
    #return object.__new__(cls)

def __init__(self):
    print("in object indtansiation")

def callBeforeInit():
    print("called before init")

v = varargs()
in object creation
Traceback (most recent call last):
File "d:\python workspace\Varargs.py", line 15, in <module>
v = varargs()
File "d:\python workspace\Varargs.py", line 5, in __new__
callBeforeInit()
NameError: name 'callBeforeInit' is not defined
对象创建中的

回溯(最近一次呼叫最后一次):
文件“d:\python workspace\Varargs.py”,第15行,在
v=varargs()
文件“d:\python workspace\Varargs.py”,第5行,在新的__
callBeforeInit()
NameError:未定义名称“callBeforeInit”

在创建对象之前会调用new,因此此时不存在此类方法

应该是

class varargs:

    def __new__(cls):
        print("in object creation")
        cls.callBeforeInit()
        return super(varargs, cls).__new__(cls)
        #return object.__new__(cls)

    def __init__(self):
        print("in object indtansiation")

    @classmethod
    def callBeforeInit(cls):
        print("called before init")

v = varargs()

您的代码并不是指一个方法,比如
cls.callBeforeInit
,而是指一个词汇范围的可调用方法,即
callBeforeInit
。正如错误所说,没有定义这样的东西。