我正在学习课程,我有一个练习来创建一个执行某些字符串功能的类。一个应该得到一个字符串,另一个应该打印字符串,但我想知道你是否真的需要在def __init__:
下创建变量这应该是这样的答案:
class InputOutString(object):
def __init__(self):
self.s = ""
def getString(self):
self.s = raw_input()
def printString(self):
print self.s.upper()
我认为在获得原始输入时创建变量会更方便。
答案 0 :(得分:3)
有点儿。
Python不会强迫你这样做,但如果不这样做,它有时会导致问题。
例如 - 如果您在s
中没有初始化__init__
,那么printString
如果您尚未调用getString
则会引发异常。但是,如果你初始化它(就像在你的例子中那样),那么它将打印一个空字符串 - 这在很多情况下是可取的。
在__init__
中初始化所有变量可以保证在需要时它们全部存在。这就是为什么这是一个好习惯。
你应该这样做的另一个原因是它让python的生活更轻松when determining the amount of memory required to store your class。 Python将检测__init__
中设置的属性并相应地分配大小。如果你随后改变了这一点(通过在类中保存新的属性而没有预料到),那么最终你的类占用可能会使每个实例的内存开销翻倍。 (感谢@ShadowRanger指出这一点)