首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >类的Cython静态类型

类的Cython静态类型
EN

Stack Overflow用户
提问于 2018-09-19 19:33:39
回答 2查看 376关注 0票数 -1

在Cython中,我们可以在参数中添加类型声明。

代码语言:javascript
复制
cdef int add(int a, int b):
  return a + b

但是,the official document没有解释如何声明类对象。我想做这样的事情:

代码语言:javascript
复制
cdef MY_CLASS edit_class(MY_CLASS myclassobj):
   myclassobj.edit()
   return myclassobj

更具体地说,我想创建一个以(纯Python) class为参数并返回它的函数。我知道它不需要指定类型就可以工作,但我想知道我是否可以像对int a所做的那样(在参数中指定类型)

有什么办法可以做到吗?或者正如this question中所说的,Cython不支持类?

EN

回答 2

Stack Overflow用户

发布于 2018-09-19 19:44:06

它们被称为“扩展类型”,所以你会有更好的机会去寻找相关的文档。严格地说,几乎任何python都可以用cython编译。因此,类在这种意义上肯定是“受支持的”。但是,如果您想利用类型声明,则需要使用cdef。有几种方法可以做到这一点。我创建了如下所示的cython类,通常会看到很好的加速效果:

代码语言:javascript
复制
cdef class MyClass:
# first initialise 'instance' variables
cdef public str string_1
cdef public int some_number

def __cinit__(self, a_string, a_number):
    self.string_1 = a_string
    self.some_number = a_number
票数 1
EN

Stack Overflow用户

发布于 2018-09-19 19:42:03

Cython确实支持class,并且可以使用cdef来实现。

提到了O‘’Reilly

“Python语句告诉cdef生成一个扩展类型,而不是常规的Python类。

尽管表面上看起来,类主体中的cdef类型声明并不是类级别属性。它们是C级实例属性;这种属性声明风格类似于C++和Java等语言。

对于扩展类型,必须以这种方式在类级别使用cdef声明所有实例属性。“

代码语言:javascript
复制
cdef class Particle:
    """Simple Particle extension type."""
    cdef double mass, position, velocity

所以,Cython支持类,CPython也支持类。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52404921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档