簡體   English   中英

__doc__在python中並在類上使用help()

[英]__doc__ in python and using help() on a class

我最近去了一次采訪,做了一些小程序測試,他們有一個簡單的兩類腳本來計算面積,邊長等。在形狀上,它看起來像這樣:

class Shape(object):

    def __init__(self, side1, side2, side3, side4):
        self.side1 = side1
        ...

    @abstractmethod
    def calc_area(self):
        pass

class Triangle(Shape):

    def calc_area(self):
        ... etc..

他們問我的問題之一是, 如果我們運行help(Shape(3, 5, 5, 6)) ,假設所有對象都已初始化,將會發生什么? 我的回答是,什么都沒有,因為沒有docstring__doc__ 看來我對這個答案不滿意,我似乎不明白為什么? 我是否認為運行help()不會發生任何事情是不正確的?

如果您查看pydoc.Helper類的源代碼(尤其是其help()方法),該類本質上就是您在調用help()時所獲得的內容,那么您會發現它仍然可以使用來獲取對象的基本結構inspect模塊和其他一些技巧。

當然,目標是,如果原始代碼編寫者不必費心編寫文檔,則至少為其他開發人員提供對象/功能簽名。 就個人而言,我仍然看不到全局名稱空間中存在help()的原因,但是我理解為什么他們從歷史和哲學的角度來放置它。

話雖這么說,無論您采訪的是誰,IMO,都是個混蛋-這與編程並沒有太大關系,但與挑剔(我想說的是非Pythonic)無關。 也就是說,假設他們沒有試圖讓您了解@abstractmethod描述符,那可能是一個有效的問題。

您對代碼的描述中有幾件事可能就是他們希望您提及的內容。 對我來說,這不是很明顯,哪個是您對代碼的記憶錯誤,哪個是真正的問題,但它們都是要考慮的事情:

  1. 您顯示的Shape類中有一個@abstractmethod 如果它具有正確定義的元類(某些東西是從abc.ABCMeta派生的),則您將無法從中創建任何實例。 只能實例化覆蓋每個抽象方法的具體子類。 因此,他們可能希望您說“您不能在Shape(...)上調用help() ,因為后者會導致TypeError

  2. 在實例上調用help將為您提供該類的每個方法的描述,即使它沒有文檔字符串。 如果存在文檔字符串,將首先顯示該文檔字符串,但始終會跟隨有關方法(和描述符等)的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM