我决定将程序从 Python3 转移到 Cython,但是这里有这样一个问题。有一个python类:
class Device:
def __init__(self, name, delay, tabl):
self.name = name
self.delay = delay
self.speed_to = tabl
def upd(self, u):
self.speed_to.update(u)
return 0
我是 Cython 的绝对初学者,所以我使用我能找到的示例将其转移到 cython 类:
cdef class Device:
cdef str name
cdef long double delay
cdef dict speed_to
def __init__(self, str names, long double delays, dict tabls):
self.name = names
self.delay = delays
self.speed_to = tabls
cpdef upd(self, dict u):
self.speed_to.update(u)
return 0
它看起来(对我来说)应该可以工作,但是在访问对象的任何属性时,它似乎Device('name', 123456, {1:2, 2:3}).name
给出了一个错误:
AttributeError: 'cget_time.Device' object has no attribute 'name'
确实,dir()
这个对象显示了['__class__', ...magic methods..., '__subclasshook__', 'upd']
,也就是说,它没有看到属性。
有什么问题,我该如何解决?
默认情况下,扩展类型字段是私有的,只对方法可见。这可以通过修饰符
readonly
和来修复public
: