Python 中的构造函数


先决条件:Python 中的面向对象编程、 Python 中的 面向对象编程 | Set 2构造函数通常用于实例化对象。构造函数的任务是在创建类的对象时对类的数据成员进行初始化(赋值)。在 Python 中, init() 方法称为构造函数,并且始终在创建对象时调用。 构造函数声明的语法:

def __init__(self):
    # body of the constructor

构造函数的类型:

  • 默认构造函数:默认构造函数是一个不接受任何参数的简单构造函数。它的定义只有一个参数,即对正在构造的实例的引用。
  • 参数化构造函数:带有参数的构造函数称为参数化构造函数。参数化构造函数将其第一个参数作为对正在构造的实例(称为 self)的引用,其余参数由程序员提供。

默认构造函数的示例:

  • Python3
class GeekforGeeks:

    # default constructor
    def __init__(self):
        self.geek = "GeekforGeeks"

    # a method for printing data members
    def print_Geek(self):
        print(self.geek)


# creating object of the class
obj = GeekforGeeks()

# calling the instance method using the object obj
obj.print_Geek()

输出

GeekforGeeks

参数化构造函数的示例

  • Python3
class Addition:
    first = 0
    second = 0
    answer = 0

    # parameterized constructor
    def __init__(self, f, s):
        self.first = f
        self.second = s

    def display(self):
        print("First number = " + str(self.first))
        print("Second number = " + str(self.second))
        print("Addition of two numbers = " + str(self.answer))

    def calculate(self):
        self.answer = self.first + self.second


# creating object of the class
# this will invoke parameterized constructor
obj1 = Addition(1000, 2000)

# creating second object of same class
obj2 = Addition(10, 20)

# perform Addition on obj1
obj1.calculate()

# perform Addition on obj2
obj2.calculate()

# display result of obj1
obj1.display()

# display result of obj2
obj2.display()

输出

First number = 1000
Second number = 2000
Addition of two numbers = 3000
First number = 10
Second number = 20
Addition of two numbers = 30

例子:

  • Python
class MyClass:
    def __init__(self, name=None):
        if name is None:
            print("Default constructor called")
        else:
            self.name = name
            print("Parameterized constructor called with name", self.name)

    def method(self):
        if hasattr(self, 'name'):
            print("Method called with name", self.name)
        else:
            print("Method called without a name")

# Create an object of the class using the default constructor
obj1 = MyClass()

# Call a method of the class
obj1.method()

# Create an object of the class using the parameterized constructor
obj2 = MyClass("John")

# Call a method of the class
obj2.method()

输出

Default constructor called
Method called without a name
('Parameterized constructor called with name', 'John')
('Method called with name', 'John')

解释:

在此示例中,我们定义了一个具有默认构造函数和参数化构造函数的类 MyClass。默认构造函数检查参数是否已传入,并相应地向控制台打印一条消息。参数化构造函数接受单个参数名称,并将对象的 name 属性设置为该参数的值。

我们还定义了一个方法 method() 来检查对象是否具有 name 属性,并相应地向控制台打印一条消息。

我们使用两种类型的构造函数创建 MyClass 类的两个对象。首先,我们使用默认构造函数创建一个对象,该对象将消息“调用默认构造函数”打印到控制台。然后,我们调用该对象的 method() 方法,该方法将消息“无名称调用的方法”打印到控制台。

接下来,我们使用参数化构造函数创建一个对象,并传入名称“John”。自动调用构造函数,并将消息“使用名称 John 调用的参数化构造函数”打印到控制台。然后,我们调用该对象的 method() 方法,该方法将消息“Method Called with name John”打印到控制台。

总的来说,这个示例展示了如何在 Python 的单个类中实现这两种类型的构造函数。

在Python中使用构造函数的优点:

  • 对象的初始化:构造函数用于初始化类的对象。它们允许您设置属性或特性的默认值,还允许您使用自定义数据初始化对象。
  • 易于实现:构造函数在 Python 中很容易实现,可以使用 init() 方法进行定义。
  • 更好的可读性:构造函数通过明确正在初始化哪些值以及如何初始化它们来提高代码的可读性。
  • 封装:构造函数可用于通过确保对象的属性以受控方式正确初始化来强制封装。

在Python中使用构造函数的缺点:

  • 不支持重载:与其他面向对象语言不同,Python 不支持方法重载。这意味着在一个类中不能有多个具有不同参数的构造函数。
  • 功能有限:与其他编程语言中的构造函数相比,Python 中的构造函数的功能有限。例如,Python 没有带有 public、private 或 protected 等访问修饰符的构造函数。
  • 构造函数可能是不必要的:在某些情况下,构造函数可能不是必需的,因为属性的默认值可能就足够了。在这些情况下,使用构造函数可能会给代码增加不必要的复杂性。

总的来说,Python 中的构造函数对于初始化对象和强制封装非常有用。然而,与其他编程语言中的构造函数相比,它们可能并不总是必要的,并且其功能受到限制。


原文链接:codingdict.net