在Python中初始化字符串变量:""还是None?

99 投票
11 回答
410640 浏览
提问于 2025-04-15 14:10

假设我有一个类里面有一个字符串的实例属性。那我应该用""(空字符串)来初始化这个属性,还是用None(空值)呢?这两种方式都可以吗?

def __init__(self, mystr="")
   self.mystr = mystr

或者

def __init__(self, mystr=None)
   self.mystr = mystr

编辑: 我之前想的是,如果我用""作为初始值,那我就是在“声明”这个变量是字符串类型。这样的话,我以后就不能把其他类型的值赋给它了。我这样理解对吗?

编辑: 我觉得这里需要说明的是,我之前的想法是错的。其实把其他类型的值赋给一个变量是没有问题的。我很喜欢S.Lott的一条评论:“因为在Python中没有什么是‘声明’的,所以你并不是在正确的思考方式。

11 个回答

15

None表示“没有设置”,而其他任何值则表示一个“默认值”。

所以,如果你的类可以处理空字符串,并且你希望空字符串作为默认值,就用""。如果你的类需要检查这个变量是否被设置过,就用None。

注意,变量一开始是不是字符串并不重要。你可以在任何时候把它改成其他类型或值。

17

初始化一个空字符串的另一种方法是使用内置的 str() 函数,而且不需要传入任何参数。

str(object='')

这个函数会返回一个字符串,里面包含了一个对象的可打印表示。

...

如果不传入任何参数,它会返回一个空字符串,''。

在最初的例子中,这样写会是:

def __init__(self, mystr=str())
   self.mystr = mystr

我个人认为,这种方式更能表达你的意图。

顺便提一下,str() 函数本身就设置了一个默认的参数值为 ''

96

如果在你的程序中没有值是有意义的(比如说一个可选的值),那么你应该使用 None。这就是它的用途。

如果这个值必须由调用 __init__ 的人提供,我建议你不要给它初始化。

如果空字符串 "" 作为默认值是合理的,那就可以使用它。

在 Python 中,类型是根据使用情况来推断的。因此,你可以通过简单地赋值一个不同类型的值来改变类型。

>>> x = None
>>> print type(x)
<type 'NoneType'>
>>> x = "text"
>>> print type(x)
<type 'str'>
>>> x = 42
>>> print type(x)
<type 'int'>

撰写回答