假设我有一个带有字符串实例属性的类.我应该使用""值或" 无"初始化此属性吗?好吗?
def __init__(self, mystr="")
self.mystr = mystr
Run Code Online (Sandbox Code Playgroud)
要么
def __init__(self, mystr=None)
self.mystr = mystr
Run Code Online (Sandbox Code Playgroud)
编辑:我认为如果我使用""作为初始值,我" 声明 "变量是字符串类型.然后我将无法再为其分配任何其他类型.我对吗?
编辑:我认为这里需要注意的是,我的建议是错误的.将另一种类型分配给变量没有问题.我喜欢S.Lott的评论:" 因为Python中的任何内容都没有被宣布",所以你并没有考虑到这一点. "
wie*_*rob 71
如果没有值在程序中有意义(例如可选值),则应使用None.无论如何,这都是它的目的.
如果该值必须由__init__的调用者提供,我建议不要初始化它.
如果""作为默认值有意义,请使用它.
在Python中,类型是从用法中推导出来的.因此,您可以通过仅指定另一种类型的值来更改类型.
>>> x = None
>>> print type(x)
<type 'NoneType'>
>>> x = "text"
>>> print type(x)
<type 'str'>
>>> x = 42
>>> print type(x)
<type 'int'>
Run Code Online (Sandbox Code Playgroud)
Pau*_*aul 12
None用于表示"未设置",而任何其他值用于表示"默认"值.
因此,如果您的类处理空字符串并且您希望它作为默认值,请使用"".如果您的类需要检查变量是否已设置,请使用None.
请注意,如果您的变量最初是一个字符串并不重要.您可以在任何其他时刻将其更改为任何其他类型/值.
Ste*_*ens 11
初始化空字符串的另一种方法是使用str()不带参数的内置函数.
STR(对象= '')
返回一个包含对象的可打印表示的字符串.
...
如果没有给出参数,则返回空字符串''.
在原始示例中,它将如下所示:
def __init__(self, mystr=str())
self.mystr = mystr
Run Code Online (Sandbox Code Playgroud)
就个人而言,我相信这更好地传达了你的意图.
请注意,它str()本身设置的默认参数值为''.
要么可能没事,但我认为没有明确的答案.
None好"",因为""可能是有效值,""可能更好,因为它实际上是一个字符串,你可以调用它的字符串方法.如果你去了None,这些将导致例外.""可以提供帮助.如果你有一个循环,说:
def myfunc (self, mystr = ""):
for other in self.strs:
mystr = self.otherfunc (mystr, other)
Run Code Online (Sandbox Code Playgroud)
然后潜在的未来优化器会知道它str总是一个字符串.如果你使用过None,那么在第一次迭代之前它可能不是一个字符串,这需要循环展开以获得相同的效果.虽然这不是一个假设(它在我的PHP编译器中出现了很多),但你绝对不应该编写代码来考虑这一点.我只是觉得它可能很有趣:)
| 归档时间: |
|
| 查看次数: |
261075 次 |
| 最近记录: |