Повторно инициализировать объект самостоятельно.__ init __ (...)
Может ли кто-нибудь объяснить, можно ли повторно инициализировать объект, вызвав "self. init (". как показано на следующем упрощенном примере?
Причина, по которой я спрашиваю, заключается в том, что я не мог найти этот метод ни в нескольких книгах python, ни в Интернете. Есть некоторые, которые предлагают перечислить все атрибуты и установить их на начальное значение по одному. В принципе, я хочу установить свой объект в начальное состояние после того, как он выполнил некоторые задачи.
class Book(object):
def __init__(self,name,author):
self.name = name
self.author = author
self.copies = 5
def reset(self):
self.__init__(self.name,self.author)
def incrementCopy(self):
self.copies += 1
Kite = Book('kite runner','khaled hosseini')
print 'initial number of copies:', Kite.copies
Kite.incrementCopy()
Kite.incrementCopy()
Kite.incrementCopy()
print '3 copies are added:', Kite.copies
Kite.reset()
print 'number of copies are reinitialized', Kite.copies
initial number of copies: 5
3 copies are added: 8
number of copies are reinitialized 5
Ответы
Ответ 1
Единственная особенность __init__
заключается в том, что она вызывается автоматически при создании экземпляра. Кроме этого, это обычный метод, и безопасно использовать его, чтобы вернуть объект в исходное состояние.
Говоря это, только потому, что это безопасно, это не значит, что это хорошая идея. Другие люди, смотрящие на ваш код, могут быть смущены этим, и нетрудно все это сделать в методе reset
(который __init__
может даже вызвать), чтобы более подробно описывать, как этот метод используется.
Ответ 2
Я считаю это очень плохой практикой - вы не должны __init__
вручную (если не вызывать __init__
родительского класса). Кроме того, передача данных объекта обратно в __init__
несколько странная.
Почему бы не что-то вроде этого:
class Book(object):
def __init__(self,name,author):
self.name = name
self.author = author
self.reset()
def reset(self):
self.copies = 5