Cython exetension类uu getattr uuuu与python的行为不同';s类计数器部件

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

编辑:这个问题比我问的第一个问题更复杂,所以我删除了所有内容并重新编辑了这个问题

我尝试用python创建一个类,下面的代码可以工作: 从我的test_loop.pyd文件

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:是的,我的问题不是那么容易解释,所以在简化问题的同时,我发现了另一个问题。我确实编辑了我的帖子,所以你可以按照我的测试。对不起,我太快下结论了。