您能解释一下this article取自stubbing out functions or classes
的概念吗?
class Loaf:
pass
这个类没有定义任何方法或属性,但从语法上讲,定义中需要有一些东西,所以你使用了pass。这是一个Python保留字,意思是“移动,没有什么可看到的”。这是一个什么都不做的声明,当你在删除函数或类时,它是一个很好的占位符。
谢谢
答案 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在许多场景中都是一种有用的技术,包括:
答案 2 :(得分:3)
省略号(...
)优于pass
。 pass
的意思是“什么都不做”,而省略号是将来代码的占位符。效果相同,但含义不同。
class C():
...
def f():
...
答案 3 :(得分:1)
pass
的原因是Python依赖于缩进,并且在冒号之后需要一个或多个缩进语句(例如在class
或function
之后)
如果没有语句(如在存根函数或类的情况下),仍然需要至少有一个缩进语句,因此您可以使用特殊的pass
语句作为占位符。你可以轻松地放一些没有效果的东西,如:
class Loaf:
True
这也很好(但在我看来不如使用pass
那么明确)。
答案 4 :(得分:1)
Stubbing是一种软件开发技术。在规划了模块或类之后,例如通过绘制它的UML图,您就可以开始实现它了。
由于您可能需要实现许多方法和类,因此从存根开始。这只是意味着您只需将函数的定义写下来并保留实际代码以供日后使用。优点是你不会忘记方法,你可以在代码中看到它时继续考虑你的设计。
答案 5 :(得分:1)
请注意,你可以存根这样的函数:
def get_name(self) -> str : ...
def get_age(self) -> int : ...
(是的,这是有效的python代码!)
对于由第三方库动态添加到对象的存根函数并且您希望输入提示,这可能很有用。 发生在我身上......曾经: - )