2009-12-23 28 views

Trả lời

5

Tìm thấy nó! Nó chỉ là vấn đề thiết lập phần tử tp_dict của đối tượng kiểu và điền thêm các mục vào nó cho mỗi biến tĩnh. Mã C sau tạo một biến tĩnh giống như mã Python ở trên:

PyTypeObject type; 
// ...other initialisation... 
type.tp_dict = PyDict_New(); 
PyDict_SetItemString(type.tp_dict, "bar", PyInt_FromLong(1)); 
2

Bạn có thể chuyển mã nguồn đó tới Py_CompileString bằng các cờ thích hợp.

Nếu bạn đã có lớp học, bạn có thể sử dụng PyObject_SetAttr.

+0

Cảm ơn đề xuất! Có vẻ như một chút của một cách vòng xoay để làm điều đó mặc dù - là có bất cứ điều gì tương tự như PyModule_AddIntConstant cho các lớp học? – Vil

+0

Xin lỗi, tôi chỉ mới nhận thấy rằng bạn đã cập nhật câu trả lời của mình. Cảm ơn một lần nữa vì sự giúp đỡ. Tôi đã thử sử dụng PyObject_SetAttr, nhưng không có vấn đề khi tôi gọi nó là tôi nhận được một TypeError với thông báo "không thể thiết lập thuộc tính của built-in/extension type X" (trong đó X là tên kiểu của tôi). Tôi đang làm điều gì đó sai, hoặc làm điều này chỉ đơn giản là không làm việc với các đối tượng kiểu? – Vil

+0

Bạn nên dán mã của mình? – joeforker

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