【发布时间】:2013-02-11 15:27:14
【问题描述】:
我正在构建一个具有属性的对象,该属性的值是在实例化时随机生成的。该属性将不时被分配一个新值(也是随机的),因此我正在定义一种方法来执行此操作。通过在__init__ 中调用该方法来初始化属性是不是很糟糕?这很容易避免——我只需要复制少量代码——但调用该方法似乎更优雅。这是一个例子:
import random
class Robot(object):
def __init__(self):
self.setDirection()
def setDirection(self):
self.direction = random.random() * 360
【问题讨论】:
-
不,这样做还不错。方法 (setDirection) 是一个帮助类的函数,如果它需要帮助类在初始化或任何其他阶段实现其目的。
-
由于事物的初始化顺序与您预期的不同,因此可能会出现错误,但只要辅助方法不依赖于对象的任何状态,您就可以了。
-
(上面的一个例子是如果你从超类的
__init__方法调用子类中覆盖的方法。由于通常首先调用超类构造函数,如果覆盖假定子类构造函数中的代码已经运行,您遇到了一个难以解决的问题。尽管在 Python 中比在 Java/C# 中要少,因为您可以随时调用super().__init__()。) -
@millimoose 这是一个好点,我不确定是否要这样做,因为我习惯于直接在
__init__中查看定义/初始化的属性。
标签: python methods initialization