Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据输入对象类型的不同,Python函数的行为也不同_Python_Oop_Linear Algebra - Fatal编程技术网

根据输入对象类型的不同,Python函数的行为也不同

根据输入对象类型的不同,Python函数的行为也不同,python,oop,linear-algebra,Python,Oop,Linear Algebra,在Python中,我是否可以编写一个函数,将对象作为输入,并根据对象的类型执行不同的计算 例如,假设我有两个类:“圆”和“线”。我定义了一个具有半径和中心位置的圆对象a,以及一个具有不同半径和中心位置的圆对象B。然后我定义了一个直线对象C,它有一个方向向量和一个沿直线的点 我想编写一个计算交点的函数: def intersect(obj1,obj2): # Returns intersection of two geometric entities 如果我输入两个圆A和B,我希望函数返

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

例如,假设我有两个类:“圆”和“线”。我定义了一个具有半径和中心位置的圆对象a,以及一个具有不同半径和中心位置的圆对象B。然后我定义了一个直线对象C,它有一个方向向量和一个沿直线的点

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

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

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

是的,您当然可以检测Python对象的类型,并在此基础上执行不同的行为。内置的
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))
正如预期的那样,输出为:

42
[3.14159,2.71828]
None

是的,您当然可以检测Python对象的类型,并在此基础上执行不同的行为。内置的
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))
正如预期的那样,输出为:

42
[3.14159,2.71828]
None

从一致的接口角度来看,这不是很明智<代码>相交应返回两种情况下的相交点,然后使用单独的函数获取具有几何意义的重叠区域。这将使您的代码更容易推理。在检查类型方面(请参阅为什么通常不这样做),使用。这更有意义,我将编写它以返回两个圆圈相交的点,我认为这是明智的。然后,您可以查看例如相交点(…)的
并知道这是有意义的,而不必担心该点的输入恰好是什么类型的。是否最好只为每种相交定义一个单独的函数?搞砸了。。。我认为从一致的界面角度来看,这不是很聪明<代码>相交应返回两种情况下的相交点,然后使用单独的函数获取具有几何意义的重叠区域。这将使您的代码更容易推理。在检查类型方面(请参阅为什么通常不这样做),使用。这更有意义,我将编写它以返回两个圆圈相交的点,我认为这是明智的。然后,您可以查看例如相交点(…)的
并知道这是有意义的,而不必担心该点的输入恰好是什么类型的。是否最好只为每种相交定义一个单独的函数?搞砸了。。。我认为,通常您会使用
isinstance(x,int)
,来处理子类化、接口实现等。通常您会使用
isinstance(x,int)
,来处理子类化、接口实现等。