尝试在Python中将一个对象类型转换为另一个对象类型

2024-09-27 21:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码:

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-nurbcurve对象投射到ON-Curve对象。我不太确定这在Python中是否可行。我知道我可以把一个字符串转换成一个整数,比如:int(“1”)。我不确定如何正确处理未内置的其他对象类型。在

谢谢你


Tags: 对象代码modelifontolerancedoublecurve
1条回答
网友
1楼 · 发布于 2024-09-27 21:26:12

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

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

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

Python不检查参数类型,除非有显式的代码可以这样做,而且大多数函数没有这样的代码。相反,他们只是假设调用者不是傻瓜,并且传递了一个他们可以使用的对象。这通常被称为“鸭子打字”

如果给定函数不接受要传入的对象,则可以编写转换函数、多重继承子类或包装类,使您的行为与函数正常工作所需的类型非常相似。但这通常是不需要的,因为设计api的人不是白痴,他们会在可能的情况下慷慨地接受。在

相关问题 更多 >

    热门问题