30

次の簡単な例に示すように、 「self. init (」.を呼び出してオブジェクトを再初期化することが安全かどうかを誰か説明できますか?

私が尋ねている理由は、いくつかのpythonの本でもインターネットでもこの方法を見つけることができなかったからです。すべての属性をリストし、それらを 1 つずつ初期値に設定することを提案する人もいます。基本的に、いくつかのタスクが完了した後、オブジェクトを初期状態に設定したいと考えています。

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
4

3 に答える 3

33

唯一の特別な点__init__は、インスタンスの作成時に自動的に呼び出されることです。それ以外は通常の方法であり、オブジェクトを初期状態に戻すために安全に使用できます。

とは言っても、安全だからといってそれが良いとは限りません。あなたのコードを見ている他の人々はそれによって混乱するかもしれません.メソッドがどのように使用されているかをより明確にするために、resetメソッド内のすべてを実行することは難しくありません.__init__

于 2012-10-26T17:09:44.243 に答える
29

私はそれを非常に悪い習慣だと考えています - 手動で行うべきではありません(親クラス__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
于 2012-10-26T17:05:22.300 に答える