Python 根据输入对象类型表现不同的函数
Python function that behaves differently depending on the input object types
在Python中,我可以写一个函数,以对象为输入,根据对象的类型进行不同的计算吗?
例如,假设我有两个 class:"circle" 和 "line"。我定义了一个具有半径和中心位置的圆形对象 A,以及一个具有不同半径和中心位置的圆形对象 B。然后我用一个方向向量和一个沿线的点定义一个线对象 C。
我想写一个计算交集的函数:
def intersect(obj1,obj2):
# Returns intersection of two geometric entities
如果我输入两个圆 A 和 B,我希望函数 return A 和 B 的交集区域。但是如果我输入圆 A 和线 C,我希望输出为线穿过圆的点(如果有的话)。所以 intersect(obj1,obj2) 需要以某种方式读取 obj1 和 obj2 的 class,并据此采取行动。
是的,您当然可以检测 Python 对象的类型并根据该类型执行不同的行为。内置 type()
方法将提供您需要的信息。
我要强调的是,这更像是回到过程范式,而你最好研究面向对象(特别是多态性)。
您还可以 return 任意类型 来自一个函数,因此 return 在一种情况下计算两个圆的二维交集,在两种情况下圆与线的交点,当然也是可行的。
同样,这是解决可能性,而不是智慧。我当然有可能尝试用黑线鳕砍倒一棵巨大的 Karri 树,但这样的举动充其量是值得怀疑的。
例如,以下程序显示了如何根据传入的参数类型 return 不同类型的值:
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中,我可以写一个函数,以对象为输入,根据对象的类型进行不同的计算吗?
例如,假设我有两个 class:"circle" 和 "line"。我定义了一个具有半径和中心位置的圆形对象 A,以及一个具有不同半径和中心位置的圆形对象 B。然后我用一个方向向量和一个沿线的点定义一个线对象 C。
我想写一个计算交集的函数:
def intersect(obj1,obj2):
# Returns intersection of two geometric entities
如果我输入两个圆 A 和 B,我希望函数 return A 和 B 的交集区域。但是如果我输入圆 A 和线 C,我希望输出为线穿过圆的点(如果有的话)。所以 intersect(obj1,obj2) 需要以某种方式读取 obj1 和 obj2 的 class,并据此采取行动。
是的,您当然可以检测 Python 对象的类型并根据该类型执行不同的行为。内置 type()
方法将提供您需要的信息。
我要强调的是,这更像是回到过程范式,而你最好研究面向对象(特别是多态性)。
您还可以 return 任意类型 来自一个函数,因此 return 在一种情况下计算两个圆的二维交集,在两种情况下圆与线的交点,当然也是可行的。
同样,这是解决可能性,而不是智慧。我当然有可能尝试用黑线鳕砍倒一棵巨大的 Karri 树,但这样的举动充其量是值得怀疑的。
例如,以下程序显示了如何根据传入的参数类型 return 不同类型的值:
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