python - 用 self.__init__(...) 重新初始化一个对象

标签 python

谁能解释通过调用“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

最佳答案

__init__ 唯一的特别之处在于它会在创建实例时自动调用。除此之外,它是一个普通方法,可以安全地使用它来将您的对象设置回其初始状态。

话虽这么说,仅仅因为它是安全的并不意味着它是个好主意。查看您的代码的其他人可能会对此感到困惑,并且在 reset 方法(__init__ 甚至可以调用)中做所有事情并不困难,以更明确关于如何使用该方法。

关于python - 用 self.__init__(...) 重新初始化一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091221/

相关文章:

python - Scikit-Learn .fit() 方法如何将数据传递给 .predict()?

python - GIS:Python 中的 line_locate_point()

python - 使用 Python 进行傅里叶变换

python - C 数组基本操作和操作与 Python 的比较

python - 如何通过 pandas python 中的日期记录中的值来增加日期范围?

python - 如何从正在运行的 QThread 向启动它的 PyQt Gui 发出信号?

python - 如何在gensim中使用TaggedDocument?

python - 防止代码在 syncdb 期间运行

python - 如何让word2vec模型的加载时间和内存使用更加高效?

python - 如何格式化最多 N 位小数的数字,其中 N 是随机的