class Works(type):
def __new__(cls, *args, **kwargs):
print([cls,args]) # outputs [<class '__main__.Works'>,()]
return super().__new__(cls, args)
class DoesNotWork(type):
def __new__(*args, **kwargs):
print([args[0],args[:0]]) # outputs [<class '__main__.doesNotWork'>,()]
return super().__new__(args[0], args[:0])
Works() # is fine
DoesNotWork() # gets "RuntimeError: super(): no arguments"
Насколько я вижу, в обоих случаях super._new__ получает литерал класса в качестве первого аргумента и пустой кортеж как 2-й.Получите ошибку «super(): no arguments» в одном случае, но не аналогичный случай
Так почему же кто-то дает ошибку, а другой нет?
Вы не используете 'cls' из' __new__' в своей 'DoNotWork' ... (также - вы действительно должны использовать' * args' в 'super()', а также для правильной подписи подписей ... –
Im явно не дает '__new__' в' DoesNotWork' конкретный 1-й аргумент, но передаются аргументы 'super()', поэтому я не понимаю ошибку. Использование * args дает мне 'TypeError: type() принимает 1 или 3 аргумента, хотя это отдельный вопрос. – Luken
Есть ли какая-то особая причина, по которой вы используете '__new__', а не' __init__' - похоже, что вы действительно пытаетесь использовать более позднюю версию ... –