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 回答