python接口设计中的__all__和del

Posted 山竹果 BLOG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python接口设计中的__all__和del相关的知识,希望对你有一定的参考价值。

最近在实现python接口中遇到了一些小问题,解决后总结如下。

目的:在设计接口时,只暴露某个文件的特定方法。

 

例如:

t.py

import os
import sys

def a():
    pass

def b():
    pass

def c():
    pass

假设我们要开发的插件名为Shona,如果我们在设计插件时,在__init__.py文件中进行如下操作:

from t import *

如上import后,调用时可见方法:

Shona.t.a()
Shona.t.b()
Shona.t.c()
Shona.t.os
Shona.t.sys

 

 

如果我们只想暴露方法a和方法b,介绍两种方法如下:(实际应用中,看哪个方便哪个可以work用哪个,也可两者结合,实际上我自己用到的情况较为复杂,两者都有使用,在这里就不详细说了 Ψ( ̄(?) ̄)Ψ )

 

1. 在t.py中添加如下代码:

__all__ = [a, b]

# 写在文件头部或尾部即可,其他位置也可,注意是列表哦

 

这样做,是指定暴露哪些方法。

当然,我们更推荐如下import 方法:

from t import a
from t import b

 

然而,这些方式有时是不能完全满足需求的(这里各位在实践中便会晓得),可以使用下面那种较为暴力的方法。 

 

2. 在__init__.py中添加如下代码

这个是观察tensorflow源码发现的,原来tensorflow也有这样子的问题:

del c
del os
del sys

 

这里就是说把不小心误引入的删掉,不暴露给用户。

 

以上就是本次小小的总结啦~ 祝大家开发愉快。

 

 

以上是关于python接口设计中的__all__和del的主要内容,如果未能解决你的问题,请参考以下文章

Python基础(18)_面向对象程序设计2(反射__str____del____item__系列)

一文了解 Python 中的对象析构函数:__del__

python里的“__all__ ”作用

python的__all__

Python中的 __all__和__path__ 解析

Python概念-__del__的悲伤