20

インスタンス化時に値がランダムに生成される属性を持つオブジェクトを作成しています。属性には時々(ランダムに)新しい値が割り当てられるので、そうするためのメソッドを定義しています。内部からそのメソッドを呼び出して属性を初期化するのは悪い形式__init__ですか?回避するのは簡単ですが(少量のコードを複製するだけで済みます)、メソッドを呼び出す方がエレガントなようです。次に例を示します。

import random

class Robot(object):
    def __init__(self):
        self.setDirection()

    def setDirection(self):
        self.direction = random.random() * 360
4

2 に答える 2

19

内でインスタンスメソッドを呼び出す__init__ことは問題ありませんが、サブクラスでオーバーライドされる可能性がある場合は注意してください。

class A(object):

    def __init__(self):
        self.greet()

    def greet(self):
        print('Hello from A')


class B(A):

    def __init__(self, name):
        super(B, self).__init__()
        self.name = name

    def greet(self):
        print('Hello from B', self.name)

ここで、Bがインスタンス化されると、その前提条件が満たされる前にB.greetによって呼び出されます(定義されていません)。A.__init__self.name

于 2013-02-11T15:34:01.217 に答える
4

内で他のインスタンスメソッドを呼び出すことに問題はありません__init__


Pythonでは、インスタンスメソッドクラスメソッドが区別されることに注意してください。内でクラスメソッドを使用する正当な理由を考えることはできません。__init__これは、正当な理由が存在しないということではありませんが、ケースはおそらくかなりまれです。

于 2013-02-11T15:28:38.297 に答える