如何在Python 3中使用类型注释重载不同接口的相同命名方法

克罗尔

所以我有这样的Python 3代码:

from abc import ABC, abstractmethod                                                                                                                                                                                                                                                         
from datetime import datetime                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                            
class IfaceA(ABC):                                                                                                                                                                                                                                                                          
    @abstractmethod                                                                                                                                                                                                                                                                         
    def pass_data(self, data: str):                                                                                                                                                                                                                                                         
        pass                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                            
class IfaceB(ABC):                                                                                                                                                                                                                                                                          
    @abstractmethod                                                                                                                                                                                                                                                                         
    def pass_data(self, data: datetime):                                                                                                                                                                                                                                                    
        pass                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                            
class MyClass(IfaceA, IfaceB):                                                                                                                                                                                                                                                              
    def pass_data(self, data: str):                                                                                                                                                                                                                                                         
        print("str", data)                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                            
    def pass_data(self, data: datetime):                                                                                                                                                                                                                                                    
        print("datetime", data)                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                            
def main():                                                                                                                                                                                                                                                                                 
    c = MyClass()                                                                                                                                                                                                                                                                           
    c.pass_data("Any string.")                                                                                                                                                                                                                                                              
    c.pass_data(datetime.now())                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                            
if __name__ == "__main__":                                                                                                                                                                                                                                                                  
    main()

它给了我这样的输出:

datetime Any string.
datetime 2020-07-13 02:00:34.676715

不使用带有str参数IfaceA.pass_data方法。

有没有办法使它像C ++一样工作?

Omar Sy |

你可以使用多种方法

 from abc import ABC, abstractmethod                                                                                                                                                                                                                                                         
from datetime import datetime                                                                                                                                                                                                                                                               
from multimethod import multimethod
                                                                                                                                                                                                                                                                                          
class IfaceA(ABC):                                                                                                                                                                                                                                                                          
    @abstractmethod                                                                                                                                                                                                                                                                         
    def pass_data(self, data: str):                                                                                                                                                                                                                                                         
        pass                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                            
class IfaceB(ABC):                                                                                                                                                                                                                                                                          
    @abstractmethod                                                                                                                                                                                                                                                                         
    def pass_data(self, data: datetime):                                                                                                                                                                                                                                                    
        pass                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                            
class MyClass(IfaceA, IfaceB):
    @multimethod                                                                                                                                                                                                                                                           
    def pass_data(self, data: str):                                                                                                                                                                                                                                                         
        print("str", data)
    @multimethod                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    def pass_data(self, data: datetime):                                                                                                                                                                                                                                                    
        print("datetime", data)                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                            
def main():                                                                                                                                                                                                                                                                                 
    c = MyClass()                                                                                                                                                                                                                                                                           
    c.pass_data("Any string.")                                                                                                                                                                                                                                                              
    c.pass_data(datetime.now())                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                            
if __name__ == "__main__":                                                                                                                                                                                                                                                                  
    main()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TS如何解释具有相同命名函数属性但签名不同的类型的交集(与接口相同会产生错误)?

如何在vbscript中重命名具有相同扩展名的不同命名文件

如何在Python中使用相同的方法重构不同的类?

如何在不同的类型注释中引用相同的类型变量?

如何在 SQL 中使用 xml 命名空间通配符(表中具有不同命名空间 url 的多个 xml 文件)

如何声明 100 个相同类型的不同命名变量?

两种不同的类型如何使用接口在golang中实现相同的方法?

如何在 Python 3 的不同类中使用相同的类属性?

如何在python中的不同实现中使用相同的单元测试?

如何在接口的方法中使用泛型类型参数

如何在 Python 3 中使用 exit()

如何在python 3.6中使用类型提示?

如何在python中使用.split方法?

如何在jQuery中获得相同命名的最大类元素的长度?

如何在python中相同的重载派生类方法中调用基类方法?

我如何使用 forEach 在 SwiftUI 中循环遍历不同命名的形状

如何使用 jq 访问具有不同命名键的对象中的 json 值

如何在Spyder 3中使用Python 3?

如何在不同的类ArrayList中使用相同的方法?

如何在python中重载内置模块?

如何在Python中动态重载函数?

如何在Python 3中使用urllib中的basejoin

Laravel:如何在表4中显示属于1模型的不同命名列

如何在Python中打印函数的类型注释?

如何在python zipinfo中设置注释

如何在python中创建此特定的接口类型?

如何在Python 3中使用wxPython?

如何在Python 3中使用Slugify?

如何在 OpenCV 3 中使用 Python 中的 PCACompute 函数?