删除函数或类

时间:2011-10-01 13:05:18

标签: python stub stubbing

您能解释一下this article取自stubbing out functions or classes的概念吗?

class Loaf:
    pass  
  

这个类没有定义任何方法或属性,但从语法上讲,定义中需要有一些东西,所以你使用了pass。这是一个Python保留字,意思是“移动,没有什么可看到的”。这是一个什么都不做的声明,当你在删除函数或类时,它是一个很好的占位符。

谢谢

6 个答案:

答案 0 :(得分:22)

  

删除函数或类

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

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

     def tank(self):
         pass

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

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

     def tank(self):
         raise NotImplementedError

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

答案 1 :(得分:5)

'stub'是一个占位符类或函数,它还没有做任何事情,但需要在那里,以便定义所讨论的类或函数。我们的想法是你已经可以使用它的某些方面(例如将它放在集合中或将其作为回调传递),即使你还没有编写实现。

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

  • 团队开发:通常,主程序员将提供填充方法存根的类骨架和描述方法应该做什么的注释,将实际实现留给其他团队成员。
  • 迭代开发:Stubbing允许从部分实现开始;代码还没有完成,但它仍然编译。详细信息将在以后的迭代过程中填写。
  • 演示目的:如果方法或类的内容对于演示而言并不感兴趣,则通常会将其遗漏,只留下存根。

答案 2 :(得分:3)

省略号(...)优于passpass的意思是“什么都不做”,而省略号是将来代码的占位符。效果相同,但含义不同。

class C():
    ...

def f():
    ...

答案 3 :(得分:1)

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

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

class Loaf:
    True

这也很好(但在我看来不如使用pass那么明确)。

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

请注意,你可以存根这样的函数:

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

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

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