Python函数,根据输入对象类型的不同,表现不同

时间:2016-09-25 12:18:32

标签: python oop linear-algebra

在Python中,我可以编写一个函数,它将对象作为输入,并根据对象的类型执行不同的计算吗?

例如,假设我有两个课程:" circle"和" line"。我定义了一个具有半径和中心位置的圆形对象A,以及一个具有不同半径和中心位置的圆形对象B.然后,我定义了一个线对象C,其中包含方向向量和沿线的点。

我想写一个计算交集的函数:

def intersect(obj1,obj2):
    # Returns intersection of two geometric entities

如果我输入两个圆圈A和B,我希望函数返回A和B的交点区域。但是如果我输入圆圈A和C行,我希望输出为点(如果有的话)线穿过圆圈的地方。因此,相交(obj1,obj2)将需要以某种方式读取obj1和obj2的类,并相应地采取行动。

1 个答案:

答案 0 :(得分:2)

是的,您当然可以检测Python对象的类型并根据它执行不同的行为。内置的.lightContent方法将提供您需要的信息。

我应该强调,这是相当于程序范式,而你在研究面向对象(特别是多态)方面做得更好。

您还可以从函数返回任意类型,因此在一个案例中返回两个圆的二维交集,在另一个案例中返回一个圆和线之间的两个交点,当然可行同样。

再一次,那是解决可能性,而不是智慧。我当然可以尝试用黑线鳕砍掉一棵巨大的卡里树,但这种举动的智慧充其量是可疑的。

作为示例,以下程序显示了如何根据传入的参数类型返回不同类型的值:

type()

正如预期的那样输出:

def fn(x):
    if type(x) is int:
        return 42
    if type(x) is list:
        return [3.14159,2.71828]
    return None

print(fn(1))
print(fn([1,2]))
print(fn(42.7))