你能解释一下来自这篇文章的概念stubbing out functions or classes
吗?
class Loaf:
pass
这个类没有定义任何方法或属性,但语法上需要在定义中添加一些内容,因此你可以使用pass。这是Python中的保留字,意思是“走开,这里没有什么可看的”。它是一个不执行任何操作的语句,在模拟函数或类时是一个好的占位符。
谢谢
桩函数或桩类
这指的是编写类或函数但尚未实现它们。例如,我可能创建一个类:
class Foo(object):
def bar(self):
pass
def tank(self):
pass
我已经编写了函数的桩代码,因为我还没有实现它们。但是,我认为这不是一个好的计划。相反,你应该这样做:
class Foo(object):
def bar(self):
raise NotImplementedError
def tank(self):
raise NotImplementedError
那样,如果你在它被实现之前意外地调用了该方法,你会收到一个错误而不是什么都不发生。def get_name(self) -> str : ...
def get_age(self) -> int : ...
(是的,这是有效的Python代码!)
对于由第三方库动态添加到对象中的函数,并且您希望具有类型提示,存根函数可能非常有用。我也遇到过这种情况...一次 :-)
在IT技术领域,使用省略号...
来作为存根比使用pass
更好。
pass
表示“什么都不做”,而...
表示“这里应该有些内容”——它是未来代码的占位符。其实现效果相同,但意义不同。
存根是软件开发中的一种技术。例如,当您规划了一个模块或类,比如绘制它的UML图后,就开始实现它。
由于您可能需要实现许多方法和类,因此您可以从存根开始。这意味着您只编写函数的定义,并将实际代码留待以后再写。优点是您不会忘记方法,并且可以在看到代码的同时继续思考设计。
pass
的原因是 Python 是缩进依赖的,并期望在冒号之后有一个或多个缩进语句(例如在class
或function
之后)。
当您没有语句时(例如在存根函数或类的情况下),仍需要至少一个缩进语句,因此您可以使用特殊的pass
语句作为占位符。您也可以用没有效果的东西来代替:
class Loaf:
True
这样也可以(但在我的看法中,使用 pass
比这种方法不够清晰)。