在实例的__init__方法中调用该实例的方法是否不妥?

24 投票
2 回答
15404 浏览
提问于 2025-04-17 15:30

我正在创建一个对象,这个对象有一个属性,它的值在创建时是随机生成的。这个属性会不时被赋予一个新的值(也是随机的),所以我定义了一个方法来实现这个功能。在__init__方法中调用这个方法来初始化属性,这样做是否不太好呢?其实我可以不这样做,只需重复写一小段代码,但我觉得调用这个方法会显得更优雅。下面是一个例子:

import random

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

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

2 个回答

4

__init__里面调用其他实例方法是完全没问题的。


需要注意的是,在Python中,实例方法类方法是有区别的。我想不出在__init__中使用类方法的好理由——这并不是说没有好的理由,而是这种情况可能比较少见。

21

__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这个类的实例,A.__init__会在self.name还没有定义之前就调用B.greet,这时候条件还没有满足。

撰写回答