Python同时支持结构化编程和面向对象编程。类和对象被用来实现面向对象的编程。类定义了对象的属性。构造方法在面向对象编程中用于声明、初始化和操作对象,当类的一个对象被创建时,这个方法被自动调用。在Python中,**__init__()**函数的作用与构造方法类似,它被声明在类的内部。
语法
__init__()函数的语法给出如下。
__init__(self, [arguments])
该函数的第一个参数用来指代类的当前对象。这个函数的其它参数是可选的。在第一个参数之后可以使用零个或多个参数来初始化类的变量。在本教程的下一部分中,将介绍 __init__() 函数的不同用法。
例子-1:使用没有任何参数的构造函数
用下面的脚本创建一个 Python 文件,通过使用 __init__() 函数定义一个没有任何参数的构造方法。当TestClass的对象被创建时,这个函数将被调用。
#Declare a class with parameterless constructor
class TestClass:
#Declare constructor method
def __init__(self):
#Print a simple message
print('Constructor method has been called.')
#Create object of the class
object = TestClass()
输出
在执行了上述脚本之后,会出现以下输出。当类的对象被创建时,__init__()函数已经被调用,来自__init__()函数的信息,'构造函数方法已被调用'已经被打印出来。
例子-2:使用带参数的构造函数
用下面的脚本创建一个 Python 文件,通过使用 __init__() 函数定义一个带参数的构造方法。在脚本中已经为TestClass类创建了两个对象。因此,__init__()函数将被调用两次,并用对象创建时传递给函数的值来初始化名称变量。
#Declare a class with a parameterized constructor
class TestClass:
#Declare constructor method with one argument
def __init__(self, name):
#Print a simple message
print('Constructor method has been called.')
#Initialized the class variable
self.name = name
#Create object of the class
object1 = TestClass('Mir Abbas')
print('Welcome, ', object1.name)
#Create another object of the class
object2 = TestClass('Nila Chowdhury')
print('Welcome, ', object1.name)
print('Welcome, ', object2.name)
输出
执行上述脚本后会出现以下输出。第一个对象已被创建,其值为 "Mir Abbas",第二个对象已被创建,其值为 "Nila Chowdhury"。输出显示,第二个对象创建了第一个对象的克隆。所以,第一个对象的属性值并没有被第二个对象所覆盖。
例三:用另一个方法使用构造函数
用下面的脚本创建一个 Python 文件,其中一个构造函数方法已经和另一个方法一起被声明。在这里,__init__()函数将在创建对象时接受两个参数值,用来初始化两个类的变量,而类的另一个方法将被调用来打印类变量的值。
#Declare a class with parameterized constructor
class TestClass:
#Declare constructor method with one argument
def __init__(self, name, profession):
#Print a simple message
print('Constructor method has been called.')
#Initialized the class variables
self.name = name
self.profession = profession
#Call another method
self.display_info()
#Define another method of the class
def display_info(self):
print("The profession of ", self.name, " is ", self.profession)
#Create object of the class
object = TestClass('Kabir Hossain', 'CEO')
输出
执行上述脚本后会出现以下输出。在创建对象时,两个类的变量已经被初始化为**"Kabir Hossain "和"CEO "** 的值,这些值已经被打印出来。
例四:使用具有继承性的构造函数
用下面的脚本创建一个Python文件,其中的构造方法已经用继承的特性实现了。这里为父类和子类都定义了 __init__() 函数。display() 方法也已经为父类和子类定义。父类的 __init__() 函数有一个参数,子类有三个参数。
#Declare the parent class
class ParentClass:
def __init__(self, name):
print("The parent constructor has been called.\n")
self.name = name
def display(self):
print("Name: ", self.name)
#Declare the child class
class ChildClass(ParentClass):
def __init__(self, name, post, salary):
#Call constructor of the parent class
ParentClass.__init__(self, name)
print("The child constructor has been called.\n")
self.post = post
self.salary = salary
def display(self):
print("Name: ", self.name)
print("Post: ", self.post)
print("Salary: ", self.salary)
#Create object of the parent class
object1 = ParentClass("Tanvir Hossain")
object1.display()
#Create object of the child class
object2 = ChildClass("Farheen Hasan", 'CEO', 700000)
object2.display()
输出
执行上述脚本后,会出现以下输出。
例子5:使用多重继承的构造函数
用下面的脚本创建一个 Python 文件,其中子类已经从两个父类中创建,**__init__()函数已经为这三个类定义。子类还有一个名为display()**的方法,用来打印类中变量的值。
#Declare the parent class
class ParentClass1:
def __init__(self, name, email, contact_no):
print("The parent constructor has been called.")
self.name = name
self.email = email
self.contact_no = contact_no
#Declare the parent class
class ParentClass2:
def __init__(self, department, post):
print("Another parent constructor has been called.")
self.department = department
self.post = post
#Declare the child class
class ChildClass(ParentClass1, ParentClass2):
def __init__(self, name, email, contact_no, department, post, salary):
#Call constructor of the parent class
ParentClass1.__init__(self, name, email, contact_no)
# Call constructor of another parent class
ParentClass2.__init__(self, department, post)
print("The child constructor has been called.\n")
self.salary = salary
def display(self):
print("Name: ", self.name)
print("Email: ", self.email)
print("Contact No: ", self.contact_no)
print("Department: ", self.department)
print("Post: ", self.post)
print("Salary: ", self.salary)
#Create object of the child class
object = ChildClass('Farhan Akter', 'farhan@gmail.com', '8801937894567', 'HR', 'Manager', 500000)
#Call the display method
object.display()
输出
执行上述脚本后会出现以下输出。
结论
本教程通过简单的例子展示了Python中__init__()函数的使用方法,以帮助Python用户了解正确使用这个函数的目的。