python - 尝试在 Python 中将一种对象类型转换为另一种对象类型

标签 python casting ironpython

我有这段代码:

const ON_Curve* curve = ...;

const ON_NurbsCurve* nurb = ON_NurbsCurve::Cast( curve );
if( nurb )
{
ON_Ellipse ellipse;
double tolerance = model.m_settings.m_ModelUnitsAndTolerances.m_absolute_tolerance;
bool rc = nurb->IsEllipse( 0, &ellipse, tolerance );

它将 ON_NurbsCurve 对象转换为 ON_Curve 对象。我不太确定这在 Python 中是否可行。我知道我可以将一个字符串转换为一个整数,例如:int(“1”)。我不确定对其他未内置的对象类型执行此操作的正确方法是什么。

谢谢

最佳答案

您无法在 Python 中精确地转换对象,通常也不需要这样做,因为 Python 没有强大的类型检查功能。

从技术上讲,类型转换是将现有对象的数据解释为另一种类型,本质上是将对象视为正在类型转换成新形状的液态金属(该术语的起源)。在 Python 中,您可以尝试将对象转换为另一种格式。通常,可以接受另一个对象作为输入的对象会在其构造函数中接受它(例如 int() 可以接受字符串和数字,并且会调用 __int__()其他类型(如果存在这样的方法),让其他类型定义它们的转换方式)。如果某些类型的主构造函数无法接受给定类型的对象,则某些类型甚至具有备用构造函数(例如,XML 解析器可能在其主构造函数中接受文件名,并且具有 from_string()from_file() 分别接受字符串和类文件对象的类方法)。

在您给出的示例中,将一种类型的 Curve 对象转换为另一种类型,在 Python 中您可能甚至不需要进行任何转换。 NurbsCurve 对象可能支持 Curve 的方法和属性,任何接受 Curve 的函数都希望看到这些方法和属性,即使它不是严格的子类。如果它一个严格的子类,那么绝对没有问题,不需要转换!

Python 不会检查参数类型,除非有明确的代码来执行此操作,并且大多数函数没有此类代码。相反,他们只是假设调用者不是傻瓜,并且已经传入了他们可以使用的对象。这通常称为“鸭子打字”。

如果给定的函数不接受您想要传入的对象,您可以编写一个转换函数、一个多重继承子类或一个包装类,以使您所拥有的行为足够类似于需要获取的类型的功能来工作。但这通常是不需要的,因为设计 API 的人不是白痴,他们会在可能的情况下慷慨地接受。

关于python - 尝试在 Python 中将一种对象类型转换为另一种对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31550983/

相关文章:

时间:2019-03-09 标签:c++constconvert

c# - 在 C# 中使用 Python 对象

c# - 嵌入式 IronPython 安全

python - 给定两个相同长度的 python 列表。如何返回相似值的最佳匹配?

python - 使用 PIL 绘制文本并不适用于所有图像

python - 如何扩展 Django Form 类?

c# - 转换不断出现错误

c++ - C++ 如何检查 std::ios 对象的真值?

python - 防止注释显示在图形区域之外

linux - 如何在 Linux 上调用 IronPython