मैं एक सी ++ लाइब्रेरी को पाइथन में बेनकाब करने के लिए साइथन का उपयोग कर रहा हूं, सभी रैपर ऑब्जेक्ट्स और फ़ंक्शन को आंतरिक मॉड्यूल _pydynd
में डालकर, फिर इन्हें एक अलग पायथन मॉड्यूल के माध्यम से उजागर कर रहा हूं।
मैं dynd.nd.array
की तरह दिखने के लिए, इन एक्सटेंशन वर्गों में दिखाई देने वाले मॉड्यूल और क्लास के नाम को नियंत्रित करना चाहता हूं, उदाहरण के लिए, _pydynd.w_array
की बजाय, जो रैपर वर्ग का आंतरिक नाम है। क्या साइथन के पास ऐसा करने के लिए एक तंत्र है?मैं साइथन सीडीएफ कक्षा के मॉड्यूल/नाम को कैसे नियंत्रित करूं?
मुझे उम्मीद है कि आप अपनी परिभाषा लिखते समय सी/सी ++ कार्यों का नाम कैसे बदल सकते हैं, लेकिन मेरी खोज सूखी हो गई है। उत्पन्न सी ++ कोड जो अलग होना चाहिए यहाँ tp_name
लाइन है:
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*/
अद्यतन:
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'
हाँ, मैं इस तरह की बातें पहले से ही कर रहा हूँ, लेकिन मैं __name__ और __module__ वस्तुओं पर अलग होना चाहते हैं, तो वे जनता के साथ मेल खाते हैं इंटरफ़ेस – mwiebe