#python #new-operator #init
#python #new-оператор #инициализация
Вопрос:
в приведенном ниже коде я пытаюсь понять init и new . Проблема, с которой я сталкиваюсь, заключается в том, что метод 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 workspaceVarargs.py", line 15, in <module>
v = varargs()
File "d:python workspaceVarargs.py", line 5, in __new__
callBeforeInit()
NameError: name 'callBeforeInit' is not defined
Комментарии:
1. Ваш код не ссылается на метод, такой как
cls.callBeforeInit
— он ссылается на вызываемый объект с лексической областью, а именно простоcallBeforeInit
. Как указано в ошибке, такая вещь не определена.
Ответ №1:
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()