你能解释一下这篇文章中的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 代码!)
由第三方库动态添加到对象的存根函数可能很有用,并且您希望有输入提示。发生在我身上......一次:-)
省略号...
更适合pass
用于存根。
pass
意思是“什么都不做”,而...
意思是“这里应该做点什么”——它是未来代码的占位符。效果相同,但意义不同。
存根是软件开发中的一种技术。在您规划了一个模块或类之后,例如通过绘制它的 UML 图,您开始实现它。
由于您可能必须实现许多方法和类,因此您从存根开始。这只是意味着您只需将函数的定义写下来,然后将实际代码留到以后。优点是您不会忘记方法,并且您可以在代码中看到它的同时继续思考您的设计。
原因pass
是 Python 依赖于缩进,并且在冒号之后需要一个或多个缩进语句(例如 afterclass
或function
)。
当您没有语句时(如在函数或类的情况下),仍然需要至少有一个缩进语句,因此您可以使用特殊pass
语句作为占位符。你可以很容易地放一些没有效果的东西,比如:
class Loaf:
True
这也很好(但没有pass
我认为使用的那么清楚)。