2010-05-18 74 views
5

當聲明一個類,從一個特定的類繼承:pydoc/help()可以隱藏繼承的類方法和屬性的文檔嗎?

class C(dict): 
    added_attribute = 0 

的文檔類C列出了所有的dict方法(通過help(C)pydoc)。

有沒有辦法從自動生成的文檔中隱藏繼承的方法(文檔字符串可以引用基類,用於未覆蓋的方法)?還是不可能?

這將是有用的:pydoc列出之後其中的類定義的功能類。因此,當這些類有很長的文檔時,在模塊提供的新功能出現之前會打印很多不太有用的信息,這使得文檔難以利用(您必須跳過繼承方法的所有文檔直到你到達特定於被記錄的模塊的東西)。

回答

2

pydochelp builtin不支持這一點,但沒有理由不能編寫自己的工具(可能通過修改pydoc的源代碼),這會有你想要的行爲。只要步驟字典獲得本地定義的屬性,然後查找具有文檔作爲屬性的東西。

+0

謝謝。我只是想知道*用戶*是否可以通過調整它們來直接獲得更多可用的pydoc文檔。很高興知道pydoc和help()在這方面是有限的。 – EOL 2010-08-12 09:54:33

0

您可以使用特殊方法__dir__爲您的班級提供元類,該特殊方法返回其自己的屬性列表。 Pydoc將使用此列表。

注:

  • 這也將影響dir()行爲。
  • 在極少數情況下,使用元類已知可以打開一個入口到地獄維度。
+1

謝謝你提到這個。我試圖做你的建議(通過調整來自http://www.voidspace.org.uk/python/articles/metaclasses.shtml的示例),但是當pydoc行爲發生變化時,沒有顯示任何屬性。如果你可以提供一些代碼,這將是很好的。 :) – EOL 2012-07-06 13:00:35

1

我有同樣的問題,並通過在pydoc.py中添加3行來解決它在Windows(x86)的Python 2.7.6上的問題。說明:

  1. 使自己的LIB \副本pydoc.py
  2. 找到inherited變量出現的所有(3次,對我的計算)的文件中,並其設置爲空列表在它被定義之後。例如,我得到線809:

    ATTRS,繼承= _split_list(ATTRS,λ-T:[2]是thisclass)

和它下面一個新行寫inherited = []

現在它不再打印繼承的方法。

相關問題