zoukankan      html  css  js  c++  java
  • 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

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

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

  • 相关阅读:
    ZOJ 3818 Pretty Poem
    HDU 4597 Play Game
    HDU 4497 GCD and LCM
    CSU 1335 高桥和低桥
    UVA 10791 Minimum Sum LCM
    CSU 1119 Collecting Coins
    CSU 1120 病毒
    UVA 12169 Disgruntled Judge
    HDU 1301 Jungle Roads
    POJ 1258 Agri-Net
  • 原文地址:https://www.cnblogs.com/shona/p/11969758.html
Copyright © 2011-2022 走看看