Python 函数根据规则返回特定的(对象或值)

Python 函数根据规则返回特定的(对象或值),python,oop,python-2.7,python-3.x,uml,Python,Oop,Python 2.7,Python 3.x,Uml,假设我在python中有一个函数: def get_thing(rule): if rule == 0: return 5 #<<<< int elif rule == 1: return 'Hello' #<<<<< string else: return Student() #<<<<< Object 我的意思是,对

假设我在python中有一个函数:

def get_thing(rule):
    if rule == 0:
        return 5         #<<<< int
    elif rule == 1:
        return 'Hello'   #<<<<< string
    else:
        return Student() #<<<<< Object
我的意思是,对于一个函数来说,返回不同的数据类型或值是pythonic吗

在java中,只能返回一种类型Ex:String only

我希望你能理解我的问题:)

谢谢

编辑: 其他例子

def get_person(id):
    if #id is belongs to student:
        return Student()
    elif #id belongs to teacher
        return Teacher()

在Python中,可以从函数返回不同类型的值。就实现而言,考虑使用字典代替嵌套IFS,例如:

def get_thing(rule):
    return { 0 : 5, 1 : 'Hello'}.get(rule, Student())

你需要它做什么?我想你必须为这个问题提供更多的背景。话虽如此,第一个代码片段看起来不是一个好的解决方案。从Python允许的意义上说,这是可以的,但对于维护来说,这不是一个好的实践。请参阅上面评论中PartiallyFinite的链接。这取决于具体情况。在很多情况下,这是绝对好的。Python之所以使用duck类型是有原因的。您给出的最后一个示例是一个很好的示例。即使C++和java都有一个公共的基类(人),也可以从函数返回一个函数,这是一个很好的面向对象设计。如果它们不是从类人继承的,那么如果它们共享一个共同的行为(有相同的方法或属性),那就没问题了。这就是我们所说的鸭子打字。即使它是唯一可以打印/转换为字符串的功能,也可以从该函数返回的内容中得到任何期望值。
def get_thing(rule):
    return { 0 : 5, 1 : 'Hello'}.get(rule, Student())