【问题标题】:Can I use two constructor methods in Python? [duplicate]我可以在 Python 中使用两个构造函数方法吗? [复制]
【发布时间】:2020-11-30 22:24:40
【问题描述】:

在 Python 中,我可以像在 Java 中那样执行以下操作吗?

我想要两个构造函数,一个默认构造函数和一个要求我发送字符串的构造函数。

public class Person
{
   String name;

   public static void main(String[] args)
   {
      Person person = new Person("John");
      Person person2 = new Person();
   }

   public Person()
   {
     name = "No name";
   }

   public Person(String name)
   {
     this.name = name;
   }
}

【问题讨论】:

标签: python constructor


【解决方案1】:

在 Python 中,你不会重载构造函数,而是给 name 参数一个默认值:

class Person:
    def __init__(self, name="No Name"):
        self.name = name

【讨论】:

    【解决方案2】:

    在 Python 中,您不能有多个构造函数。唯一的方法是使用这些元素:

    • 关键字参数
    • 具有默认值的可选参数
    class Person:
        def __init__(self, name="No name"):
            self.name = name
    
    if __name__ == '__main__':
        p1 = Person()
        p2 = Person("John")
    

    【讨论】:

      【解决方案3】:

      并非没有额外的库帮助来伪造重载函数。 Pythonic 的等价物是定义一个 __init__ 方法和一个使用__init__ 的附加类方法。例如,

      class Person:
          def __init__(self, name):
              self.name = name
      
          @classmethod
          def nameless(cls, self):
              return cls("No name")
      
      person = Person("Jhon")
      person2 = Person.nameless()
      

      虽然在这种情况下,提供默认参数是多余的,可以使用

      class Person:
          def __init__(self, name="No name"):
              self.name = name
      
      person = Person("Jhon")
      person2 = Person()
      

      【讨论】:

        猜你喜欢
        • 2019-10-07
        • 2016-07-09
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        • 2018-06-30
        • 2010-12-19
        • 1970-01-01
        • 2013-02-25
        相关资源
        最近更新 更多