2009-07-18 29 views
5

Tôi muốn tạo một thể hiện của một lớp Python được định nghĩa trong phạm vi __main__ với API C.Tạo thể hiện của một lớp python, được khai báo trong python, với C API

Ví dụ, lớp được gọi là MyClass và được định nghĩa như sau:

class MyClass: 
    def __init__(self): 
     pass 

Các kiểu lớp sống dưới __main__ phạm vi.

Trong ứng dụng C, tôi muốn tạo một thể hiện của lớp này. Điều này có thể đơn giản là có thể với PyInstance_New vì nó có tên lớp. Tuy nhiên chức năng này không có sẵn trong Python3.

Bất kỳ trợ giúp hoặc đề xuất nào về các giải pháp thay thế đều được đánh giá cao.

Cảm ơn, Paul

Trả lời

16

tôi tin rằng phương pháp đơn giản nhất là:

/* get sys.modules dict */ 
PyObject* sys_mod_dict = PyImport_GetModuleDict(); 
/* get the __main__ module object */ 
PyObject* main_mod = PyMapping_GetItemString(sys_mod_dict, "__main__"); 
/* call the class inside the __main__ module */ 
PyObject* instance = PyObject_CallMethod(main_mod, "MyClass", ""); 

cộng của kiểm tra lỗi khóa học. Bạn chỉ cần DECREF instance khi bạn đã hoàn tất, hai tài liệu còn lại là tài liệu được mượn.

Các vấn đề liên quan