Python: множественные вызовы __ init __ () на том же экземпляре

__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__() на объекте, который уже создается?

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

12
задан bandana 27 January 2010 в 06:31
поделиться

3 ответа

{

int a[10]={1,2,3,4,5,6,7,89,8,9};

int k=0,i,j,l;
int sum[36],max;

for (i=0;i<10;i++)
{
for (j=i+2;j<10;j++,k++)
sum[k]=a[i]+a[j];
}
max=a[0];
for(i=0;i<36;i++)
printf("sum[%d] is %d\n",i,sum[i]);

for(l=1;l<36;l++)
{
if(max>sum[l])
continue;
else
max=sum[l];
}
printf("%d is the max sum",max);
}
-121--3286721-

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

13
ответ дан 2 December 2019 в 19:31
поделиться

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

x = Pt(1,2)
x.set(3,4)
x.set(5,10)
4
ответ дан 2 December 2019 в 19:31
поделиться

Насколько я знаю, он не вызывает никаких проблем ( Редактирование: , как это предложено кошержевым использованием Super (...) .__ init __ (...) ), но я думаю, что наличие сброс () метод () и вызов его как в __ init __ () И когда вам нужно сбросить, будет очистить.

1
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: