Python 和 Java 处理废弃API的方法

Python 和 Java 处理废弃API的方法

Python处理废弃API

观察显示,Python api在不同的粒度上被弃用,这些粒度被分为四类:函数、参数、参数值等。

一、装饰器:库贡献者用于声明Python api的弃用的策略是通过所谓的Python装饰器机制来实现的。与Java注释机制类似,Python装饰器提供了一种方法来扩展函数的行为,而不需要显式地修改它。

二、硬编码的警告:API弃用的声明是通过在运行时向API用户提供硬编码的警告消息来实现的。

三、注释:在源代码中,废弃号被声明为注释(即自然语言)。在这里插入图片描述

Java注解和Python装饰器的区别


  • Java 注解也叫元数据,一种代码级别的说明。Python 装饰器是一种语法糖。
  • 注解是给别人看的,功能不仅仅由注解决定;装饰器直接拦截,直接改变被装饰对象的行为!
  • 注解(Annotation):仅提供附加元数据支持,并不能实现任何操作。需要另外的 Scanner 根据元数据执行相应操作。
  • 装饰器(Decorator):仅提供定义劫持,能够对类及其方法的定义并没有提供任何附加元数据的功能。
Python装饰器

首先需要理解,Python中的一切元素皆是对象,包括函数。

我写了一个简单的double函数,然后进行编译,可以发现,def double(x):
首先LOAD了一个Code object的对象,然后LOAD了一个函数名double,MAKE_FUNCTION将二者变成了一个FUCTION object,然后将FUNCTION OBJECT保存到了double里,所以我们在Python中定义一个函数时,只是新建了一个变量,然后将function object保存到了这个变量里。这就可以理解了函数可以作为参数和返回值进行传递了。

在这里插入图片描述
特殊的是,函数对象是一个callable,还需要某些参数x,才能调用。实际上,python中的任何变量你都可以调用,但是这个东西如果不是callable的话在runtime时会出错。

在这里插入图片描述

decorate

举一个简单的例子,前两行定义了一个函数dec,阴影部分才是decorate真正起作用的部分,中间定义了一个double函数,而真正decorate起作用的部分时CALL_FUNCTION和STORE_NAME。可以看出,decorate完全等价于

double = dec(double)

decorate不过是一个输入和输出都为函数的函数

在这里插入图片描述
带参数的decorate,相当于两次函数调用。

在这里插入图片描述

Java处理废弃的API

注解 @Deprecated 可以标记 Java API 状态,可以是以下几种:

使用它存在风险,可能导致错误
可能在未来版本中不兼容
可能在未来版本中删除
一个更好和更高效的方案已经取代它。

@Deprecated 可以标注很多元素:类、接口、方法、属性。。。。。。

这个注解也是给编译器看的,也是做编译检查的;
被这个注解标注的元素表示已过时,在编译器进行编译的时候会进行“过时提醒”;

@Deprecated
public class AnnotationTest03_User {
    @Deprecated
    public AnnotationTest03_User(){
        System.out.println("我是AnnotationTest03_User(),是一个被@Deprecated修饰的类,已经过时。");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值