Cython exetension类uu getattr uuuu与python的行为不同';s类计数器部件
编辑:这个问题比我问的第一个问题更复杂,所以我删除了所有内容并重新编辑了这个问题 我尝试用python创建一个类,下面的代码可以工作: 从我的test_loop.pyd文件Cython exetension类uu getattr uuuu与python的行为不同';s类计数器部件,python,initialization,cython,Python,Initialization,Cython,编辑:这个问题比我问的第一个问题更复杂,所以我删除了所有内容并重新编辑了这个问题 我尝试用python创建一个类,下面的代码可以工作: 从我的test_loop.pyd文件 class mockClass: def __init__(self,val): self._val = val def __getattr__(self,attrName): print('Getattr:',attrName) print('This wor
class mockClass:
def __init__(self,val):
self._val = val
def __getattr__(self,attrName):
print('Getattr:',attrName)
print('This work on python:',self.__dict__)
try:
return self.__dict__[attrName]
except:
raise AttributeError("Unknow ",attrName)
def __add__(self,val):
return mockClass(self._val+val)
def __str__(self):
return str(self._val)
def test_func():
print('In test func')
myList = [1,2,3]
for ii,item in enumerate(myList):
if (ii==0):
out = mockClass(item)
else:
print('Add:',item)
out += item
return out
模块正常工作时,我的test.py文件:
import test_loop
a = test_loop.test_func()
print(a)
但是当我将python类更改为cython类时,我陷入了递归循环中:getattr(我也尝试了getattribute),因为它试图查找dict,这同样需要函数getattr
cdef class mockClass:
cdef int _val
def __init__(self,val):
self._val = val
def __getattr__(self,attrName):
print('Getattr:',attrName)
print('This work on python:',self.__dict__)
try:
return self.__dict__[attrName]
except:
raise AttributeError("Unknow ",attrName)
def __add__(self,val):
return mockClass(self._val+val)
def __str__(self):
return str(self._val)
我找不到cython扩展类的任何函数getattr示例 为什么不使用内置的求和函数
mySym=sum(myList)
mySum=sum(myList)为什么不继续前进呢?你的原始代码显然已经被循环化了mySum+=item
不是cython语法,因此不起作用。请提供@ead:我知道,我想说的是,我正在寻找一种语法,允许我告诉编译器,请假设变量mySum已经在其他地方初始化,我知道我在做什么doing@Booboo:因为我提供的求和函数是我实际需要的简化版本。实际上我想要:``mySum.mySpecialAppend(item)```-文档中没有明确说明这一点,但我已经链接到了显示如何添加它的位。因为sum函数只是一个简化的问题。实际上,我想使用一个自定义函数:mySum.mySpecialAppend(item),那么你应该考虑更新你的问题并讲述整个故事,这样有可能有人给你一个让你满意的答案。@Booboo:是的,我的问题不是那么容易解释,所以在简化问题的同时,我发现了另一个问题。我确实编辑了我的帖子,所以你可以按照我的测试。对不起,我太快下结论了。