我正在构建一个具有属性的对象,该属性的值在实例化时随机生成。该属性将不时被赋予一个新值(也是随机的),所以我正在定义一个方法来执行此操作。通过从__init__
内调用该方法初始化属性是不好的形式?这很容易避免 - 我只需复制少量代码 - 但调用该方法似乎更优雅。这是一个例子:
import random
class Robot(object):
def __init__(self):
self.setDirection()
def setDirection(self):
self.direction = random.random() * 360
答案 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__
中使用类方法的一个很好的理由 - 这并不是说不存在一个好理由,而是可能的情况很可能非常罕见。