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

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

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

原文地址:https://www.cnblogs.com/shona/p/11969758.html

时间: 2024-10-18 05:57:36

python接口设计中的__all__和del的相关文章

PHP/TP5 接口设计中异常处理

PHP提供 Exception 类来处理异常 new Exception('错误信息(默认为空)','错误代码(默认0)','异常链中前一个异常') 然后可以通过 e -> getMessage() 获取异常信息 e -> getCode() 获取异常错误码 处理异常 try { //可能抛出异常代码 throw new Exception("Error Processing Request", 1); } catch (Exception $e) { // 1. 记录日志

[接口设计]从客户端的角度设计后端的接口

前言 兵马未动,粮草先行.在一款APP产品的各个版本迭代中,兵马的启动指的是真正开始敲代码的时候,粮草先行则是指前期的需求,交互,UI等评审准备阶段,还有本文要说的接口的设计与评审.虽然很多时候一个api接口的业务,数据逻辑是后端提供的,但真正使用这个接口的是客户端,一个前端功能的实现流程与逻辑,有时候只有客户端的RD才清楚,从某种意义来说,客户端算是接口的需求方.所以建议在前期接口设计和评审时,客户端的RD应该更多的思考和参与,什么时机调什么接口?每个接口需要哪些字段?数据含义怎么给?只有这些

接口设计·

在大公司里工作,业务都已经拆分掉,必然用服务化中间件来将各个业务的服务串联起来,那很显然,你会调用别人的接口,或者你的系统本身也要提供一些接口出去,我只是根据我的感受简单说一下,接口设计中的注意事项 一般情况下,我们都用maven来管理项目,对外接口一般会放到一个独立的模块中,暴露出去:所以第一点要注意的是,这个独立的module尽可能不要依赖任何第三方jar,更不用说那些很重的框架或者别的业务方的jar,因为这种反例我见过太多了,我不想在这里吐槽,因为这实在太糟糕了,我们一直强调弱依赖,低耦合

HTTP接口设计及日志打印

任何一个稍大的项目中,web接口的使用是少不了的,不管C2S还是S2S都会依赖于http的接口.下面对这一两年来写过各种Http接口做一个总结. 大致可以分为以下五点: 1.使用requestId来记录追踪请求 2.只在body中接收json字符串的请求,避免产生编码问题 3.返回适当的数据结构 4.打印有用的日志 5.提供可阅读的文档 第一点,使用requestId来记录追踪请求.如果你这么做了,当你查找定位问题的时候就会知道这是一个多么有用的规则.这里可以强制请求中用UUID作为reques

go语言学习笔记---非入侵式接口设计探究

关键词:非入侵式 首先我们要知道什么是入侵式接口, 比如定义了接口 Person接口:Fight(),Play(),Zhimaoyi(),Zuofan()方法 Women接口:Zhimaoyi(), Zuofan()方法 Man接口:Fight(),Play()方法 classPerson类实现了Person接口的所有方法 在传统的oo编程语言中,为了得到一个Man的对象,至少要写一个classMan类去实现Man接口,为了得到一个Women的对象又不得不写一个classWomen类去实现Wom

python\接口与归一化设计

1接口 接口的概念: Java 语言中的接口很好的展现了接口的含义: IAnimal.java /* * Java的Interface很好的体现了我们前面分析的接口的特征: * 1)是一组功能的集合,而不是一个功能 * 2)接口的功能用于交互,所有的功能都是public,即别的对象可操作 * 3)接口只定义函数,但不涉及函数实现 * 4)这些功能是相关的,都是动物相关的功能,但光合作用就不适宜放到IAnimal里面了 */ package com.oo.demo; public interfac

Python接口自动化测试框架实战 从设计到开发

第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的http\https请求包.如何模拟请求数据.过滤规则及修改响应数据.如何解决无法抓包问题        以及fiddler接口测试,让大家能应用好工具! 第3章 Requests常见方法实战运用本章重点讲解 get\post请求测试.接口测试中结果处理.上传\下载文件接口测试.请求中header及coo

在Java API设计中,面向接口编程的思想,以及接口和工厂的关系

现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashtable等具体的实现类.这样做的好处是,程序容易扩展.如果使用Map作为参数,用户可以使用任何实现Map接口的类作为参数,而不是仅仅限制使用HashMap或Hashtable作为参数,使程序的实现更加灵活. 接口(Java的Interface),只定义了一些抽象的方法(也可以定义一些常量,但不鼓励这么

C++ 11可变参数接口设计在模板编程中应用的一点点总结

概述 本人对模板编程的应用并非很深,若要用一句话总结我个人对模板编程的理解,我想说的是:模板编程是对类定义的弱化. 如何理解“类定义的弱化”? 一个完整的类有如下几部分组成: 类的名称: 类的成员变量(或属性,C#中属性和成员变量还是有区别的): 类的成员方法: 从编译器的角度看,我们必须明确指定以上3部分,才算完整地定义了一个类并且编译通过. 所谓的“类弱化”,是指类的设计者在定义类的时候,并没有完整定义一个类,而是把类的其中一部分的定义留给类的使用者. 从传统才c++98看,通过模板类,使用