2015-07-21 53 views
0

我有这段代码:试图施放一个对象类型到另一个在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_NurbsCurve对象ON_Curve对象。我不太确定这在Python中甚至是可能的。我知道我可以接受一个字符串并将其转换为一个整数,如:int(“1”)。我不知道是什么与不是建立在其它对象类型这样做的正确方法。

谢谢

+0

那不是python代码!? – ypnos

+0

这正是问题:我如何在Python中实现这一点? – konrad

回答

0

你不能准确地投对象在Python中,你也不一般需要因为Python没有很强的类型检查。

技术上,铸件就好像它是另一种类型的,本质上处理对象作为正被铸造成一个新的形状(术语的由来)的液体金属解释现有的对象的数据。在Python中,你可以做的是尝试对象转换为另一种格式。通常是一个对象,该对象可以采取另一个对象作为输入将在其构造接受它(例如int()可以采取的字符串以及表示,并将调用__int__()在其它类型的,如果这样的方法存在,让其他类型的限定它们是如何转换的) 。有些种类甚至有替代的构造,如果他们的主要构造不能接受给定类型的对象(例如,XML解析器可能会接受它的主要构造的文件名,并有from_string()from_file()接受字符串和类似文件的对象类的方法, 分别)。

在你给出的例子中,将一种类型的Curve对象转换成另一种类型,在Python中你可能甚至不需要做任何转换。该NurbsCurve对象可能支持任何函数接受一个Curve希望看到,即使它不是一个严格的子类的方法和属性Curve。如果它是一个严格的子类,那么肯定没有问题,也不需要转换!

Python不检查参数类型,除非有明确的代码,这样做的,而且大部分功能没有这样的代码。相反,他们只是假定调用者不是一个doofus并且已经传入了一个可以使用的对象。这通常被称为“鸭子打字”。

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

相关问题