由于return语句中getName
指定了 多个元素 :
def getName(self):
return self.first_name, self.last_name
Python将返回一个基本上包含它们的容器对象。
在这种情况下,返回以 逗号分隔 的 一组 元素会创建 一个元组 。多个值 只能在容器内返回 。
def foo(a, b):
return a, b
您可以查看使用dis.dis
,Python字节码的反汇编程序生成的字节码。对于不带括号的逗号分隔值,它看起来像这样:
>>> import dis
>>> def foo(a, b):
... return a,b
>>> dis.dis(foo)
2 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BUILD_TUPLE 2
9 RETURN_VALUE
如您所见,值首先使用加载到内部堆栈中LOAD_FAST
,然后生成一个BUILD_TUPLE
(抓住2
放置在堆栈上的先前元素)。由于存在逗号,Python知道创建一个元组。
您也可以使用来指定其他返回类型,例如列表[]
。对于这种情况,BUILD_LIST
将按照与元组等效的相同语义发布a :
>>> def foo_list(a, b):
... return [a, b]
>>> dis.dis(foo_list)
2 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BUILD_LIST 2
9 RETURN_VALUE
返回的对象的类型实际上取决于方括号的存在(()
如果至少有一个逗号,则可以省略元组)。[]
创建列表和{}
集合。字典需要key:val
成对。
总而言之, 返回一个实际对象 。如果该对象是容器类型,则它可以包含多个值,给人以返回多个结果的印象。然后,通常的方法是直接解压缩它们:
>>> first_name, last_name = f.getName()
>>> print (first_name, last_name)
除此之外,您的Java方式正泄漏到Python中:-)
在Python中编写类时不要使用getter,请使用properties
。