Изменить: проблема сложнее, чем первый вопрос, который я задал, поэтому я удалил все и заново отредактировал вопрос.
Я попытался создать класс в python, работает следующий код: Из моего файла test_l oop .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 Я застрял в рекурсивном l oop: 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)
Я не могу найти функциональный getattr пример класса расширения Cython.