上次推送《Python 监控文件事件变化—以音乐高潮提取为例》,终于继承了LoggingEventHandler类。在修改on_created的时候,我用了一个词叫:重载,很快我就意识到了,直到犯了一个错误。先来看看重载和重写的概念:重载:重载的条件如下:1.在一个类中2.方法名相同3.参数不同参数不同又可以分为:参数不同类型,参数个数不同。上次push中对on_created的修改没有针对参数,我们只是简单的修改了函数的内容。所以只能称之为改写。改写:条件如下:1、参数列表与原函数一致。2、返回类型与原函数一致。所以,按照这个条件,Python中的大部分继承修改只能称为重写,不能称为重载。Python实际上不需要重载的概念。为什么?重载主要是针对参数,一是改变参数的类型,二是改变参数的个数。但是Python不需要限制参数类型,可以接受可变参数,所以函数重载很鸡肋。不过我们还是可以通过[singledispatch](https://docs.python.org/3/library/functools.html#functools.singledispatch)装饰器来实现重载,不过官方称其为泛型函数:当需要为重载函数添加装饰器:fromfunctoolsimportsingledispatch@singledispatchdeffun(arg,verbose=False):ifverbose:print("Letmejustsay,",end="")print(arg)然后使用register属性注册重载函数:@fun.register(int)def_(arg:int,verbose=False):ifverbose:print("Strengthinnumbers,eh?",end="")print(arg)@fun.register(list)def_(arg:list,verbose=False):ifverbose:print("Enumeratethis:")fori,eleminenumerate(arg):print(i,elem)效果如下:>>>fun(42,verbose=True)数量上的优势,嗯?42>>>fun(['spam','spam','eggs','spam'],verbose=True)Enumeratethis:0spam1spam2eggs3spam看,所以我们已经成功重新加载,即使我们赢了'大部分时间都不会使用它。这是我们文章的结尾。如果你今天想要我们的Python教程,请继续关注我们。如果对您有帮助,请点击下方的赞/观看。有什么问题可以在下方留言区留言,我们会耐心解答!Python实用书(pythondict.com)不只是一本书欢迎来到公众号:Python实用书原文来自Python实用书:Python重载与重写与泛型函数
