在实例的__init__方法中调用该实例的方法是否不妥?
我正在创建一个对象,这个对象有一个属性,它的值在创建时是随机生成的。这个属性会不时被赋予一个新的值(也是随机的),所以我定义了一个方法来实现这个功能。在__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
,这时候条件还没有满足。