由于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) 20 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) 20 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。



