![](/img/trans.png)
[英]Return documentation on class constructor method WITHOUT using help or .__doc__
[英]__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
描述符,那可能是一個有效的問題。
您對代碼的描述中有幾件事可能就是他們希望您提及的內容。 對我來說,這不是很明顯,哪個是您對代碼的記憶錯誤,哪個是真正的問題,但它們都是要考慮的事情:
您顯示的Shape
類中有一個@abstractmethod
。 如果它具有正確定義的元類(某些東西是從abc.ABCMeta
派生的),則您將無法從中創建任何實例。 只能實例化覆蓋每個抽象方法的具體子類。 因此,他們可能希望您說“您不能在Shape(...)
上調用help()
,因為后者會導致TypeError
。
在實例上調用help
將為您提供該類的每個方法的描述,即使它沒有文檔字符串。 如果存在文檔字符串,將首先顯示該文檔字符串,但始終會跟隨有關方法(和描述符等)的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.