从该实例的__init__方法中调用实例方法是不好的形式?

时间:2013-02-11 15:27:14

标签: python methods initialization

我正在构建一个具有属性的对象,该属性的值在实例化时随机生成。该属性将不时被赋予一个新值(也是随机的),所以我正在定义一个方法来执行此操作。通过从__init__内调用该方法初始化属性是不好的形式?这很容易避免 - 我只需复制少量代码 - 但调用该方法似乎更优雅。这是一个例子:

import random

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

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

2 个答案:

答案 0 :(得分:8)

__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调用。

答案 1 :(得分:1)

__init__中调用其他实例方法没有任何问题。


请注意,在python中,实例方法class methods之间存在区别。我想不出在__init__中使用类方法的一个很好的理由 - 这并不是说不存在一个好理由,而是可能的情况很可能非常罕见。