接口或类的存根方法

12 投票
6 回答
25483 浏览
提问于 2025-04-17 03:29

你能解释一下“stubbing out functions or classes”这个概念吗?这个概念来自于这篇文章

class Loaf:
    pass  

这个类没有定义任何方法或属性,但从语法上讲,定义里必须有点东西,所以你可以用“pass”。“pass”是Python中的一个保留字,意思就是“继续往下走,这里没什么好看的”。它是一个什么都不做的语句,当你在创建函数或类的框架时,用它作为占位符非常合适。

谢谢你

6 个回答

7

请注意,你可以像这样简化函数:

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

(没错,这段代码在Python中是有效的!)

有时候,第三方库会动态地给一个对象添加函数,而你希望能有类型提示,这时候简化函数就很有用。这个情况我碰到过一次 :-)

8

“存根”是一个占位符类或函数,它目前还没有实际功能,但需要存在,以便定义这个类或函数。简单来说,你可以在还没写具体功能之前,就先用它的一些方面,比如把它放到一个集合里或者作为回调函数传递。

使用存根是一种在很多情况下都很有用的技巧,包括:

  • 团队开发:通常,主程序员会提供一些类的框架,里面填充了一些方法的存根,并附上注释说明这些方法应该做什么,具体的实现则留给其他团队成员来完成。
  • 迭代开发:使用存根可以让你从部分实现开始;代码虽然还不完整,但依然可以编译。后续的迭代中会逐步完善细节。
  • 演示目的:如果某个方法或类的内容在演示中不重要,通常会省略,只留下存根。
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

这样,如果你在实现之前不小心调用了这个方法,就会出现错误,而不是什么都不发生。

撰写回答