是否在__init __()方法中包含某些内容的问题

时间:2010-11-22 12:52:05

标签: python oop

我是OOP的新手,因此,我正在寻找有关编码出现以下问题的良好做法的建议。

我正在定义一个Seller(a, b, c, d)类。此类有许多属性,其中两个属于mostRecentProfitprofitHistory。但是,在初始化类时,这两个的值是未知的。程序中的其他一些步骤必须在实现之前执行。我的问题是:

在卖家类的__init__(a, b, c, d)中,我应该写

self.mostRecentProfit = None
self.profitHistory = []

或者,我应该在__init__方法中根本不定义这些。前者对我有吸引力的原因是,通过查看__init__()方法,我可以知道该类的所有属性。但是,这可能不是一个很好的理由。任何建议将不胜感激。

谢谢。

3 个答案:

答案 0 :(得分:4)

__init__()中定义属性可以使代码更好,因为没有看到代码的人必须开始使用它。当一个类开始访问一开始似乎不存在的属性时,这可能会令人困惑。

此外,由于您的一个默认值是列表而不是None,因此初始化它意味着您始终可以将该属性视为列表,而不必担心它的状态。

答案 1 :(得分:3)

我会定义它们。根据我的经验,当处理实例的代码频繁引用这些属性时,不会这样做,这意味着你最终会在循环之前永远键入if object.profitHistory:等。在那里有一个空列表,你可以跳过这些条件。正如你所说,它使它更清晰。

答案 2 :(得分:1)

我会在__init()方法中定义它们,因为这不仅会记录它们通常的内容,而且如果您将其默认值定义为有效的,则允许其余大部分代码使用即使这些属性永远不会更新,也可以轻松处理类的实例。

因此,在您的示例中,这意味着将self.mostRecentProfit初始化为00.0而不是None。执行此操作将允许将其用作数字,而不会在每次引用之前检查其存在的值是否等于None,或者将它们中的每一个包装在try/except块中以处理其中的情况他们从未明确地设定为另一个价值。