构造函数重载 python

constructor overloading python

我试图在 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中正确实现构造函数重载?

我猜你问的是这个

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

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

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

How to implement constructor overloading correctly in 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