【问题标题】:Python Constructor OverloadingPython 构造函数重载
【发布时间】:2020-09-21 03:38:23
【问题描述】:

我在 C++ 中遇到了类构造函数的概念。但是我还没有找到一种方法来使用 2 种或更多不同的方法在 Python 中初始化一个类。谁能告诉我该怎么做?

【问题讨论】:

  • 查看数据模型google.com/search?client=firefox-b-e&q=python+init+vs+new中的__init____new__。通常在 Python 中,您不会实现构造函数 (__new__),而只需使用 __init__ 来初始化您的类的新实例。
  • 您是在询问一般的构造函数,还是在寻找类似于 C++ 在 Python 中的重载构造函数?
  • docs.python.org/3/tutorial/classes.html 这是一般构造函数的标准方法。这也是一个很好的解释youtube.com/watch?v=ZDa-Z5JzLYM。我希望这有帮助! :)
  • Python 没有方法重载,如果它是您正在寻找的。但是你可以让不同的类方法像工厂一样工作,也就是说,具有不同的名称,接受它们自己的参数列表并返回相同或不同类型的对象实例。
  • @progmatico 但这不会像 init 提供的那样,对吧?我不想使用方法 car1 和 car2 创建汽车实例。

标签: python class


【解决方案1】:

python中不需要多个构造函数,如果有多个这样的情况可以用下面的方式初始化

class A:
    def __init__(self, arg_1, arg_2=None):
        self.arg_1 = arg_1
        self.arg_2 = arg_2

所以当需要初始化A类的对象时,可以使用

a1 = A(2)
a2 = A(2, 4)

虽然严格来说__init__ 不是构造函数而是初始化器

【讨论】:

  • 如果是有几个可选参数的问题,当然这是一个有效的选择。请参阅help(int.from_bytes) 以了解我在上面评论中的意思的示例,为int() 提供替代方法
【解决方案2】:

@Ratan Rithwik 解决方案是正确的,但只有 2 个案例

如果您想拥有尽可能多的案例,您可以使用 **kwarg
one example 和 @thebjorn 回答

编辑:混合“标准”参数(具有默认值)和 kwargs

class Player:
    def __init__(self, name='John', **kwargs):
        self.name = name
        self.last_name = kwargs.get('last_name')


p = Player(last_name='Doe')
print (p.name) # John
print (p.last_name) #Doe

p1 = Player('foo')
print (p1.name) # foo
print (p1.last_name) #None

【讨论】:

  • 我可以在那里提供默认值吗?假设 None 可能是一个潜在的可接受值
  • 是的,您可以使用带有默认值的“标准”参数:查看我的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2011-07-30
  • 1970-01-01
相关资源
最近更新 更多