Blender Python对象api:类型方法返回字符串的枚举非int按预期方式。

时间:2017-09-01 23:10:27

标签: python api blender

我已经用C编程多年了,我明白C中的Enum是什么...... 现在我用Python写了一个Blender插件,我觉得我对Python很了解......但有些事情困扰着我。

“类型”方法中的此文档 https://docs.blender.org/api/2.78/bpy.types.Object.html 它返回一个Enum类型......

但枚举类型是'str',一个字符串,其中int(我的意思是数字)值?或者它可能是Python看到这些东西的方式?我不能同意这一点,或者我遗漏了一些东西,或者对我来说,文件是错误的。如果这是正确的,文档必须说'返回一个字符串'而不是枚举。

先谢谢了。 对不起,我的英语不好,巴西人在这里,没有校正员。

1 个答案:

答案 0 :(得分:0)

虽然它似乎是一个混合器奇怪,但根据定义,enumerated type是一组命名值,在C / C ++中,这些值存储为int数据类型,这可能是基于内存使用的决定比较它们时的性能,考虑1972年C创建时的速度和内存。 python 3.x标准库的support for enums与您期望的类似。

因此,虽然对象类型是可能值的枚举,但所选值将存储为字符串,用于对应于C源中定义的值集合。

部分blenders构建过程生成用于保存/加载混合文件的源,并且还用于制作python绑定,可以找到混合器C源中的相关枚举here,该字符串位于第二项似乎是用于python中匹配的项目。如果对start here感兴趣,可以解释搅拌机DNA / RNA。

你可以在blenders python中找到类似的用法,示例代码here显示使用bpy.props.EnumProperty,其中每个枚举项是一组多个值。更好的示例可能是使用枚举来定义菜单,如this answer中所示。

类似的奇怪是operators的返回类型,它是一个集合,集合中的每个项目都是一个字符串。我们不只是返回一个字符串,它需要是一个作为字符串对象的项目的集合。