12

你能解释一下这篇文章中的stubbing out functions or classes概念

class Loaf:
    pass  

这个类没有定义任何方法或属性,但是从语法上讲,定义中需要有一些东西,所以你使用 pass。这是一个 Python 保留字,意思是“继续前进,这里没什么可看的”。这是一个什么都不做的语句,当你存根函数或类时它是一个很好的占位符。

谢谢你

4

6 回答 6

28

存根函数或类

这是指编写类或函数但尚未实现它们。例如,也许我创建了一个类:

class Foo(object):
     def bar(self):
         pass

     def tank(self):
         pass

我已经删除了这些函数,因为我还没有实现它们。然而,我不认为这是一个伟大的计划。相反,您应该这样做:

class Foo(object):
     def bar(self):
         raise NotImplementedError

     def tank(self):
         raise NotImplementedError

这样,如果您在实现之前不小心调用了该方法,您将收到一个错误,然后什么也没有发生。

于 2011-10-01T13:14:51.310 回答
8

“存根”是一个占位符类或函数,它还没有做任何事情,但需要存在以便定义相关的类或函数。这个想法是您已经可以使用它的某些方面(例如将其放入集合中或将其作为回调传递),即使您尚未编写实现。

存根在许多场景中都是一种有用的技术,包括:

  • 团队开发:通常,首席程序员会提供充满方法存根的类骨架和描述方法应该做什么的注释,将实际实现留给其他团队成员。
  • 迭代开发:存根允许从部分实现开始;代码还不完整,但它仍然可以编译。在以后的迭代过程中会填写详细信息。
  • 演示目的:如果一个方法或类的内容对演示目的不感兴趣,它通常会被忽略,只留下存根。
于 2011-10-01T13:17:10.360 回答
6

请注意,您可以像这样存根函数:

def get_name(self) -> str : ...
def get_age(self) -> int : ...

(是的,这是有效的 Python 代码!)

由第三方库动态添加到对象的存根函数可能很有用,并且您希望有输入提示。发生在我身上......一次:-)

于 2018-05-08T07:47:25.067 回答
4

省略号...更适合pass用于存根。

pass意思是“什么都不做”,而...意思是“这里应该做点什么”——它是未来代码的占位符。效果相同,但意义不同。

于 2020-03-02T22:42:14.643 回答
1

存根是软件开发中的一种技术。在您规划了一个模块或类之后,例如通过绘制它的 UML 图,您开始实现它。

由于您可能必须实现许多方法和类,因此您从存根开始。这只是意味着您只需将函数的定义写下来,然后将实际代码留到以后。优点是您不会忘记方法,并且您可以在代码中看到它的同时继续思考您的设计。

于 2011-10-01T13:14:27.800 回答
0

原因pass是 Python 依赖于缩进,并且在冒号之后需要一个或多个缩进语句(例如 afterclassfunction)。

当您没有语句时(如在函数或类的情况下),仍然需要至少有一个缩进语句,因此您可以使用特殊pass语句作为占位符。你可以很容易地放一些没有效果的东西,比如:

class Loaf:
    True

这也很好(但没有pass我认为使用的那么清楚)。

于 2011-10-01T13:10:31.670 回答