我是OOP的新手,因此,我正在寻找有关编码出现以下问题的良好做法的建议。
我正在定义一个Seller(a, b, c, d)
类。此类有许多属性,其中两个属于mostRecentProfit
和profitHistory
。但是,在初始化类时,这两个的值是未知的。程序中的其他一些步骤必须在实现之前执行。我的问题是:
在卖家类的__init__(a, b, c, d)
中,我应该写
self.mostRecentProfit = None
self.profitHistory = []
或者,我应该在__init__
方法中根本不定义这些。前者对我有吸引力的原因是,通过查看__init__()
方法,我可以知道该类的所有属性。但是,这可能不是一个很好的理由。任何建议将不胜感激。
谢谢。
答案 0 :(得分:4)
在__init__()
中定义属性可以使代码更好,因为没有看到代码的人必须开始使用它。当一个类开始访问一开始似乎不存在的属性时,这可能会令人困惑。
此外,由于您的一个默认值是列表而不是None
,因此初始化它意味着您始终可以将该属性视为列表,而不必担心它的状态。
答案 1 :(得分:3)
我会定义它们。根据我的经验,当处理实例的代码频繁引用这些属性时,不会这样做,这意味着你最终会在循环之前永远键入if object.profitHistory:
等。在那里有一个空列表,你可以跳过这些条件。正如你所说,它使它更清晰。
答案 2 :(得分:1)
我会在__init()
方法中定义它们,因为这不仅会记录它们通常的内容,而且如果您将其默认值定义为有效的,则允许其余大部分代码使用即使这些属性永远不会更新,也可以轻松处理类的实例。
因此,在您的示例中,这意味着将self.mostRecentProfit
初始化为0
或0.0
而不是None
。执行此操作将允许将其用作数字,而不会在每次引用之前检查其存在的值是否等于None
,或者将它们中的每一个包装在try/except
块中以处理其中的情况他们从未明确地设定为另一个价值。