__slots__
如何在Python中實現?- 這是暴露在C interface?
- 如何通過
PyTypeObject
在C中定義Python類時獲得__slots__
行爲?
12
A
回答
17
創建Python類時,它們默認爲__dict__
,您可以在其上設置任何屬性。插槽點不是創建__dict__
來節省空間。
在C接口中,反過來,擴展類默認沒有__dict__
,而且你會明確地添加一個並添加getattr/setattr支持來處理它(儘管幸運的是這些方法已經存在,PyObject_GenericGetAttr
和PyObject_GenericSetAttr
,所以你不必實現它們,只是使用它們(有趣的是,沒有PyObject_GenericDelAttr,但我不知道那是關於什麼)(我應該停止嵌套括號這樣(或不))))。
插槽因此不需要,也不適用於擴展類型。默認情況下,您只需讓getattr/setatttr方法僅訪問類所具有的屬性。
至於它是如何實現的,該代碼是在typeobject.c,並且它幾乎只是「如果對象具有__slots__
屬性,不創建__dict__
的問題。很平平無奇。:-)
相關問題
- 1. **如何在Python中實現?
- 2. 如何從Python的2端口`__slots__` 3
- 3. 如何在Python中使用__slots__獲取實例屬性名稱值
- 4. 如何在Python中實現Haskell實例?
- 5. 如何在Python中實現「如果」?
- 6. 如何實現在Python
- 7. 如何實現在Python
- 8. python當我使用'__slots__'
- 9. Python __Slots__(製作和使用)
- 10. Python的__slots__元類問題
- 11. 的Python:__slots__和描述符
- 12. 如何在Python中實現字數?
- 13. 你如何在Python中實現ECDF?
- 14. 如何在Python中實現日曆?
- 15. 如何在c中實現Python socket.unwrap()?
- 16. [python]:如何在python3中實現切片?
- 17. 如何在Scala中實現Python的issuperset()
- 18. 如何在python中實現超時?
- 19. 如何在Python/Kivy中實現ScrollView
- 20. 如何在Python中實現集線器
- 21. 如何在Python中實現鏈操作?
- 22. 如何在Python中實現`cat`
- 23. 如何在Python中保存實現類?
- 24. 在Python中如何實現rangeiterator?
- 25. 如何在Python中實現定時器
- 26. 如何在Python中實現線程socket.recv()?
- 27. int()是如何在Python中實現的?
- 28. 如何在javascript中實現python的namedtuple
- 29. 如何同時使用__slots__
- 30. 在Python中實現
能是不是隻是像在.py文件中那樣從C接口分配'__slots__'屬性? –
@David Heffernan:僅在非遺留系統中使用'。 –