Bir C++ kitaplığını python'a göstermek için cython kullanıyorum, tüm sarıcı nesneleri ve işlevleri bir iç modülde _pydynd
içine koyarak, bunları farklı bir python modülünden göstererek.
Bu uzantı sınıflarında görünen modül ve sınıfın adını denetlemek istiyorum, örneğin dynd.nd.array
, örneğin, sarıcı sınıfının iç adı olan _pydynd.w_array
yerine. Cython'un bunu yapacak bir mekanizması var mı?Bir cython cdef sınıfının modülünü/adını nasıl kontrol ederim?
Tanımlarını yazarken C/C++ işlevlerini nasıl yeniden adlandırabileceğinize benzer bir şey bulmayı umdum, ancak aramalarım kurudu. farklı olmalıdır oluşturulan C++ kod burada tp_name
çizgidir:
static PyTypeObject __pyx_type_7_pydynd_w_array = {
PyVarObject_HEAD_INIT(0, 0)
__Pyx_NAMESTR("_pydynd.w_array"), /*tp_name*/
sizeof(struct __pyx_obj_7_pydynd_w_array), /*tp_basicsize*/
GÜNCELLEME:
In [103]: nd.array.__name__
Out[103]: 'w_array'
In [104]: nd.array.__module__
Out[104]: 'dynd._pydynd'
In [105]: nd.array.__name__ = "array"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-105-73d9172a0216> in <module>()
----> 1 nd.array.__name__ = "array"
TypeError: can't set attributes of built-in/extension type 'dynd._pydynd.w_array'
In [106]: nd.array.__module__ = "dynd.nd"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-106-37f990658ede> in <module>()
----> 1 nd.array.__module__ = "dynd.nd"
TypeError: can't set attributes of built-in/extension type 'dynd._pydynd.w_array'
Evet, zaten bu gibi şeyler yapıyorum ama __name__ ve __module__ nesneler üzerinde farklı olmak istiyorlar, böylece kamuoyu ile eşleşecek arayüz – mwiebe