python - Cython 类执行相同类型的 cython 类列表
问题描述
我Rule
在 Cython 中定义了一个泛型类,它需要一个cdef
方法initialize
̀ 。我创建了一个本身定义为 a 的类Rule
,但它执行initialize
规则列表的方法:
%%cython
cdef class Rule:
cdef initialize(self, const int i):
pass
cdef class Print(Rule):
cdef int number
def __init__(self, int number):
self.number = number
cdef initialize(self, const int i):
print(self.number, i)
cdef class ChainRule(Rule):
cdef list rules
cdef int number_of_rules, j
def __init__(self, rules):
self.rules = rules
self.number_of_rules = len(rules)
cdef initialize(self, const int i):
for j in range(self.number_of_rules):
self.rules[j].initialize(i)
def run(Rule rule, const int i):
rule.initialize(i)
当 ̀run 将 Print 作为输入时,以下代码有效:
rule1 = Print(1)
rule2 = Print(2)
run(rule1, 100)
但是在内部调用规则的 ChainRule 类不起作用:
chain_rule = ChainRule([rule1, rule2])
run(chain_rule, 100)
错误信息:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/tmp/ipykernel_12612/3538048733.py in <module>
4 chain_rule = ChainRule([rule1, rule2])
5
----> 6 run(chain_rule, 100)
_cython_magic_d892e8623ea7126dd1dda2c25ea23c19.pyx in _cython_magic_d892e8623ea7126dd1dda2c25ea23c19.run()
_cython_magic_d892e8623ea7126dd1dda2c25ea23c19.pyx in _cython_magic_d892e8623ea7126dd1dda2c25ea23c19.ChainRule.initialize()
AttributeError: '_cython_magic_d892e8623ea7126dd1dda2c25ea23c19.Pri' object has no attribute 'initialize'
为什么会失败?我怎样才能让它工作?
谢谢你。
编辑,一个可行的解决方案:
cdef class ChainRule(Rule):
cdef list rules
cdef int number_of_rules, j
def __init__(self, rules):
self.rules = rules
self.number_of_rules = len(rules)
cdef initialize(self, const int i):
cdef Rule rule
for j in range(self.number_of_rules):
rule = self.rules[j]
rule.initialize(i)
解决方案
推荐阅读
- android - 动画后视图闪烁
- java - 如何使用多线程/线程池实现每隔几秒轮询一次表
- azure-devops - 在 Azure DevOps 中,与相同的 YAML 管道模板相比,经典编辑器模板中的任务缺失
- javascript - 当我创建一个函数时,每次点击里面的点击函数,然后每次点击循环运行。如何防止循环点击
- java - GRPC:用 Java/Scala 制作高吞吐量客户端
- javascript - XDSoft datetimepicker - 如何通过 javascript 动态设置日期
- java - nCipherKM 测试安装时发生错误
- azure - 我可以通过 unc-path 从我的应用服务访问 azure-storage-file 吗?
- c# - 基于多个输出的 Web api 操作在 item1、item2 下返回结果...而不是命名属性
- angularjs - TypeError:无法读取angularjs ng-idle中未定义的属性'watch'?