类中的所有变量都必须在初始化时创建吗

Bra*_*ang 2 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()
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*dow 5

有点。

Python 不会强迫您这样做,但如果您不这样做,有时可能会导致问题。

例如 - 在您的示例中,如果您没有初始化,s那么如果您尚未调用,则会引发异常。但是,如果您确实初始化了它(如您的示例中所示),那么它将打印一个空字符串 - 这在许多情况下是可取的。__init__printStringgetString

初始化所有变量__init__可以在某种程度上保证它们在需要时都存在。这就是为什么这是一个很好的做法。

您应该这样做的另一个原因是,在确定存储类所需的内存量时,它使 python 的生活更轻松。Python 将检测正在设置的属性__init__并相应地分配大小。如果您随后更改此设置(通过在不期望的类上保存新属性),那么最终您的类可能会占用每个实例双倍的内存开销。(感谢@ShadowRanger 指出这一点)