是否必须在初始化

时间:2017-11-02 02:40:30

标签: python class

我正在学习课程,我有一个练习来创建一个执行某些字符串功能的类。一个应该得到一个字符串,另一个应该打印字符串,但我想知道你是否真的需要在def __init__:下创建变量这应该是这样的答案:

class InputOutString(object):
    def __init__(self):
        self.s = ""

    def getString(self):
        self.s = raw_input()

    def printString(self):
        print self.s.upper()

我认为在获得原始输入时创建变量会更方便。

1 个答案:

答案 0 :(得分:3)

有点儿。

Python不会强迫你这样做,但如果不这样做,它有时会导致问题。

例如 - 如果您在s中没有初始化__init__,那么printString如果您尚未调用getString则会引发异常。但是,如果你初始化它(就像在你的例子中那样),那么它将打印一个空字符串 - 这在很多情况下是可取的。

__init__中初始化所有变量可以保证在需要时它们全部存在。这就是为什么这是一个好习惯。

你应该这样做的另一个原因是它让python的生活更轻松when determining the amount of memory required to store your class。 Python将检测__init__中设置的属性并相应地分配大小。如果你随后改变了这一点(通过在类中保存新的属性而没有预料到),那么最终你的类占用可能会使每个实例的内存开销翻倍。 (感谢@ShadowRanger指出这一点)