我有一个非常简单的课程:
class Item(object):
def __init__(self, guid, sku, name):
self.guid = guid,
self.sku = sku,
self.name = name
Run Code Online (Sandbox Code Playgroud)
当我创建一个对象时,例如:
item1 = Item('abc123', 1, 'abc1')
Run Code Online (Sandbox Code Playgroud)
我这样做:
print item1.guid
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
('abc123',)
Run Code Online (Sandbox Code Playgroud)
而不是预期的:
'abc123'
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
PS:name按预期工作!
self.guid = guid, # Comma means create a tuple!
self.sku = sku,
self.name = name
Run Code Online (Sandbox Code Playgroud)
您已经在__init__代码中自己完成了这项工作.元组由逗号构成.在某些情况下,括号只是为了避免歧义.
正确的代码如下所示:
self.guid = guid
self.sku = sku
self.name = name
Run Code Online (Sandbox Code Playgroud)
Python 没有这样做,你就在这里:
self.guid = guid,
self.sku = sku,
Run Code Online (Sandbox Code Playgroud)
注意到那些结尾的逗号了吗?在Python中,,实际上是构造元组的。guid,说“创建一个大小为 1 的元组,并以 guid 作为元素”也是如此。删除结尾的逗号就可以了。
不幸的是,该,运算符也是函数调用和列表/字典的内联初始化中的参数分隔符,因此通常您会遇到“元组构造”为(a,b). 但它们()只是为了让解释器消除,元组构造运算符和,参数分隔符之间的歧义。如果您没有遇到这样不明确的情况(例如赋值),那么您,只需要运算符即可,即使后面没有任何内容。
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |