回答
在「正常」Python中,您可以通過gc
標準庫模塊的gc.getobjects()
函數訪問所有對象;然後很容易循環,檢查哪些是類(而不是實例或其他) - 我相信你的意思是實例類,但如果這真的是你想要的,你也可以非常容易地獲得這些類)等。
不幸的是,App Engine中的gc
模塊沒有實現getobjects
- 這使得到達所有類非常困難。例如,通過呼叫創建一個類:
def makeaclass():
class sic(object): pass
return sic
並隱藏到某處的列表中,IS將很難觸及。
但幸運的是,因爲你在你的問題的文字說,你只關心db.Model
子類,這比gc
更容易將允許:
for amodel in db.Model.__subclasses__():
...
只要確保你明確地忽略這樣的班,你不關心一下,如Expando
;-)。
注意,這確實讓你只和準確的類,不實例 - 有沒有類似的快捷方便,如果那些你真的後在做什麼!
類是在模塊中定義。模塊由import
聲明創建。
模塊是簡單的字典。如果你願意,你可以使用一個名爲x
模塊上的dir(x)
功能或者你可以一個名爲x
模塊上使用x.__dict__
。
謝謝 - 請參閱我的答案和代碼。 – NealWalters 2009-09-17 03:28:37
根據S.Lott的回答: 如果我省略「if issubclass」,除非我獲得了我不想要的課程,否則這將起作用。
import dbModels
self.response.out.write("<br/><br/>Class Names:</br/>")
for item in dbModels.__dict__:
if issubclass(item, db.Model):
self.response.out.write("<br/>" + item)
上面給出的錯誤:
TypeError: issubclass() arg 1 must be a class
所以它要一個類名作爲PARM,而不是對象名稱顯然。
根據Alex的答案,這個偉大的工作:
self.response.out.write("<br/><br/>Class Names Inheriting from db.Model:</br/>")
for item in db.Model.__subclasses__():
self.response.out.write("<br/>" + item.__name__)
感謝兩個!
Neal
- 1. 遍歷所有類屬性
- 2. Python - 遍歷類
- 3. 循環遍歷類的所有對象
- 4. 迭代遍歷所有行Smartsheet API Python
- 5. 使用Python遍歷所有BigQuery作業
- 6. 遍歷硒python中的類
- 7. 遍歷所有SimpleTextBox的
- 8. 類型錯誤:遍歷所有非序列...在python
- 9. 遍歷所有圖像
- 10. 循環遍歷所有值
- 11. OSM - 遍歷所有像素
- 12. NSHTTPCookie:遍歷所有鍵
- 13. 遍歷所有ServletRequest屬性
- 14. 遍歷所有工作表
- 15. 遍歷所有配置
- 16. 遍歷所有分支
- 17. 遍歷所有輸入值
- 18. 遍歷在Python
- 19. 遍歷在Python
- 20. 樹遍歷python
- 21. 遍歷在Python
- 22. 遍歷在Python
- 23. 遍歷在Python
- 24. Python的 - 遍歷list.append
- 25. Qt:遍歷所有頂級窗口
- 26. 如何遍歷C++類的所有子類(在編譯時)?
- 27. 自動遍歷相同類型的所有類成員?
- 28. Java:循環遍歷類路徑中的所有類
- 29. 遍歷所有項目中JSON對象
- 30. jQuery的 - 遍歷所有的XML標籤
謝謝 - 用代碼查看我的答案。 – NealWalters 2009-09-17 03:29:12