Ver*_*ion 0 python oop linear-algebra
在 Python 中,我可以编写一个将对象作为输入并根据对象的类型执行不同计算的函数吗?
例如,假设我有两个类:“circle”和“line”。我定义了一个具有半径和中心位置的圆形对象 A,以及一个具有不同半径和中心位置的圆形对象 B。然后我定义一个带有方向向量和沿线的点的线对象 C。
我想编写一个计算交集的函数:
def intersect(obj1,obj2):
# Returns intersection of two geometric entities
Run Code Online (Sandbox Code Playgroud)
如果我输入两个圆 A 和 B,我希望函数返回 A 和 B 的交点。但是如果我输入圆 A 和线 C,我希望输出是线所在的点(如果有)穿过圆圈。所以 intersect(obj1,obj2) 需要以某种方式读取 obj1 和 obj2 的类,并采取相应的行动。
是的,您当然可以检测 Python 对象的类型并基于此执行不同的行为。内置type()方法将提供您需要的信息。
我应该强调的是,这更像是回归到过程范式,而在研究面向对象(特别是多态性)时你可能会做得更好。
您还可以从函数中返回任意类型,因此在一种情况下返回两个圆的二维交点,在另一种情况下返回圆和线之间的两个交点,当然也是可行的。
同样,这是解决可能性,而不是智慧。我当然可以尝试用黑线鳕砍倒一棵巨大的 Karri 树,但这种举动的智慧充其量是值得怀疑的。
例如,以下程序显示了如何根据传入的参数类型返回不同类型的值:
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))
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,输出是:
42
[3.14159,2.71828]
None
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |