Initialize a string variable in Python: "" or None?

Viewed 378419

Suppose I have a class with a string instance attribute. Should I initialize this attribute with "" value or None? Is either okay?

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

or

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

Edit: What I thought is that if I use "" as an initial value, I "declare" a variable to be of string type. And then I won't be able to assign any other type to it later. Am I right?

Edit: I think it's important to note here, that my suggestion was WRONG. And there is no problem to assign another type to a variable. I liked a comment of S.Lott: "Since nothing in Python is "declared", you're not thinking about this the right way."

11 Answers

Either way is okay in python. I would personally prefer "". but again, either way is okay

>>>x = None
>>>print(x)
None
>>>type(x)
<class 'NoneType'>
>>>x = "hello there"
>>>print(x)
hello there
>>>type(x)
<class 'str'>
>>> 
>>>x = ""
>>>print(x)

>>>type(x)
<class 'str'>
>>>x = "hello there"
>>>type(x)
<class 'str'>
>>>print(x)
hello there
empty_string = ""

if not empty_string:

    print "Empty string is not set"

=>Empty string is not set

if empty_string is not None:
    print "Empty string is not None"

=>Empty string is not None

Python philosophy is to be readable.
That's why it's good practice to define your attributes in __init__() even if it's optional.
In the same spirit, you have to ask yourself what clearer for anyone who reads your code. In fact the type itself give much information about future use of your variable. So:

kind = None

Is syntaxically correct, but reader does not know much. Is it a string, a code as integer, a list, etc. ?

kind_str = None
kind = ""

Both say a little more, the first has the type in its name and the second in its declaration. I would go for the second, neater.

Related