【问题标题】:constructor overloading python构造函数重载python
【发布时间】:2019-12-08 04:28:46
【问题描述】:

我试图在 Python 中实现方法重载,因此我创建了一个名为 TesClass,其中我有两个变量,一个是 va,另一个是 vb。

class Tes:
    def __init__(self,a,b):
        self.va=a
        self.vb=b
        print(self.va)
        print(self.vb)
    def __init__(self,a):
        self.__init__(a,"b-default")

Tes("n1","n2")
Tes("n3")

但它在Tes("n1","n2") 中给了我错误,说: Tes("n1","n2") TypeError: __init__() 接受 2 个位置参数,但给出了 3 个

如何在python中正确实现构造函数重载?

【问题讨论】:

    标签: python oop constructor overloading


    【解决方案1】:

    我猜你在问这个

    class Tes:
        def __init__(self,a,b="default_value_b"):
            self.va=a
            self.vb=b
            print(self.va)
            print(self.vb)
    

    【讨论】:

    【解决方案2】:

    您只能使用覆盖,而不是重载。
    这种方式可能有用。

    def __init__(self, a, b="some value"):
        self.va = a
        self.vb = b
        # do something
    

    【讨论】:

      【解决方案3】:

      如何在python中正确实现构造函数重载?

      Python 不支持任何构造函数或函数重载。但是,它不需要。相反,它支持设置默认参数。

      class Tes:
          def __init__(self, a, b="default_value_b"):
              self.va = a
              self.vb = b
              print(self.va)
              print(self.vb)
      

      如果您使用打字,问题会稍有变化。打字对 Python 来说是一个相对较新的东西,而且完全是可选的。打字允许您根据预期静态验证您的代码,并且它可以通过提供实时帮助来简化代码编写。

      在您的简单情况下,您不会使用重载,因为它只定义了一个可选参数。无论如何,参数的类型保持不变。使用 Mypy 类型注解,你的代码可以写成如下:

      
      class Tes:
        def __init__(self, a: str, b: str = "default value for b") -> None:
          self.va = a
          self.vb = b
          print(self.va)
          print(self.vb)
      

      如果您想允许None 作为b 的值,请将签名更改为:

      def __init__(self, a: str, b: Optional[str] = "default value for b") -> None:
      

      Optional可以从typing导入:

      from typing import Optional
      

      【讨论】:

        猜你喜欢
        • 2020-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 2011-07-30
        • 1970-01-01
        相关资源
        最近更新 更多