Питон:несколько вызовов __init__() в одном экземпляре

StackOverflow https://stackoverflow.com/questions/2144988

  •  23-09-2019
  •  | 
  •  

Вопрос

А __init__() функция вызывается при создании объекта.Можно ли вызвать объект __init__() функция снова, после ее создания?

instance = cls(p1=1, p2=2)
# some code
instance.__init__(p1=123, p2=234)
# some more code
instance.__init__(p1=23, p2=24)

зачем кому-то звонить __init__() на уже созданном объекте?

хороший вопрос.я хочу повторно инициализировать поля экземпляра.

Это было полезно?

Решение

Это нормально, позвонить __init__ более одного раза на объекте, пока __init__ закодирован с эффектом, который вы хотите получить (каким бы он ни был).Типичный случай, когда это происходит (поэтому вам лучше написать код __init__ соответственно!-) это когда твой класс __new__ метод возвращает экземпляр класса:что делает причина __init__ быть вызван на возвращаемом экземпляре (это может быть второй или двадцатый раз, если вы продолжаете «перерабатывать» экземпляры через свой __new__!-).

Другие советы

Можно, но это как бы ломает то, что __init__ намерен сделать.Большая часть Python на самом деле является просто соглашением, поэтому вы можете следовать ему и ожидать __init__ вызываться только один раз.Я бы рекомендовал создать функцию под названием init или reset или что-то, что устанавливает переменные экземпляра, используйте это, когда хотите сбросить экземпляр, и имейте __init__ просто позвони init.Это определенно выглядит более разумно:

x = Pt(1,2)
x.set(3,4)
x.set(5,10)

Насколько я знаю, никаких проблем это не вызывает(редактировать: как предполагает кошерное использование super(...).__init__(...)), но я думаю, что наличие reset() метод и вызов его как в __init__() и при необходимости перезагрузки будет чище.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top