如何在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条评论
登录后参与评论

相关文章

来自分类Dev

如何正确注释重载的Java方法?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在Python中的不同类中使用变量?

来自分类Dev

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

来自分类Dev

如何使用不同命名空间中的特征和类来消除特征方法冲突?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在Spyder 3中使用Python 3?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在ASP.net 5 MVC 6中,如何在不同的命名空间中使用相同的控制器名称

来自分类Dev

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

来自分类Dev

如何在Python 3中使用wxPython?

来自分类Dev

如何在Python3中使用HTTP代理?

来自分类Dev

如何在Python 3.4中使用pip 3?

来自分类Dev

如何在Python 3中使用flake8?

来自分类Dev

如何在python 3中使用inputstream?

来自分类Dev

如何在Python 3中使用cmp()?

来自分类Dev

如何在python 3中使用urllib?

来自分类Dev

如何在Python3中的类中使用Truediv?

来自分类Dev

如何在python3中使用Asterisk AGI?

来自分类Dev

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

Related 相关文章

  1. 1

    如何正确注释重载的Java方法?

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

    如何在Python中的不同类中使用变量?

  8. 8

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

  9. 9

    如何使用不同命名空间中的特征和类来消除特征方法冲突?

  10. 10

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

  11. 11

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

  12. 12

    如何在Spyder 3中使用Python 3?

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

    在ASP.net 5 MVC 6中,如何在不同的命名空间中使用相同的控制器名称

  19. 19

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

  20. 20

    如何在Python 3中使用wxPython?

  21. 21

    如何在Python3中使用HTTP代理?

  22. 22

    如何在Python 3.4中使用pip 3?

  23. 23

    如何在Python 3中使用flake8?

  24. 24

    如何在python 3中使用inputstream?

  25. 25

    如何在Python 3中使用cmp()?

  26. 26

    如何在python 3中使用urllib?

  27. 27

    如何在Python3中的类中使用Truediv?

  28. 28

    如何在python3中使用Asterisk AGI?

  29. 29

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

热门标签

归档