构造函数是一种特殊类型的方法(函数),用于初始化类的实例成员。

在C++或Java中,构造函数与类的名称相同,但在Python中,构造函数的处理方式不同。它用于创建对象。

构造函数可以分为两种类型。

  1. 带参数的构造函数
  2. 无参数的构造函数

构造函数定义在创建该类的对象时执行。构造函数还验证是否有足够的资源供对象执行任何启动任务。

在Python中创建构造函数

在Python中,方法init()模拟了类的构造函数。当实例化类时,将调用此方法。它接受self关键字作为第一个参数,允许访问类的属性或方法。

在创建类对象时,我们可以传递任意数量的参数,这取决于init()的定义。它主要用于初始化类属性。每个类都必须有一个构造函数,即使它仅依赖于默认构造函数。

考虑以下示例来初始化Employee类的属性。

示例

class Employee:  
    def __init__(self, name, id):  
        self.id = id  
        self.name = name  
  
    def display(self):  
        print("ID: %d \nName: %s" % (self.id, self.name))  
  
  
emp1 = Employee("John", 101)  
emp2 = Employee("David", 102)  
  
# accessing display() method to print employee 1 information  
  
emp1.display()  
  
# accessing display() method to print employee 2 information  
emp2.display()  

输出:

ID: 101 
Name: John
ID: 102 
Name: David

计算类的对象数量

构造函数在创建该类的对象时自动调用。考虑以下示例。

示例

class Student:    
    count = 0    
    def __init__(self):    
        Student.count = Student.count + 1    
s1=Student()    
s2=Student()    
s3=Student()    
print("The number of students:",Student.count) 

输出:

The number of students: 3

Python无参数构造函数

当我们不希望操作值或构造函数只有self作为参数时,使用无参数构造函数。考虑以下示例。

示例

class Student:  
    # Constructor - non parameterized  
    def __init__(self):  
        print("This is non parametrized constructor")  
    def show(self,name):  
        print("Hello",name)  
student = Student()  
student.show("John")   

Python带参数构造函数

带参数构造函数具有多个参数以及self。考虑以下示例。

示例

class Student:  
    # Constructor - parameterized  
    def __init__(self, name):  
        print("This is parametrized constructor")  
        self.name = name  
    def show(self):  
        print("Hello",self.name)  
student = Student("John")  
student.show()    

输出:

This is parametrized constructor
Hello John

Python默认构造函数

当我们不在类中包含构造函数或忘记声明它时,它就成为默认构造函数。它不执行任何任务,但初始化对象。考虑以下示例。

示例

class Student:  
    roll_num = 101  
    name = "Joseph"  
  
    def display(self):  
        print(self.roll_num,self.name)  
  
st = Student()  
st.display()  

输出:

101 Joseph

单个类中的多个构造函数

让我们看看另一种情况,如果在类中声明了两个相同的构造函数会发生什么。

示例

class Student:  
    def __init__(self):  
        print("The First Constructor")  
    def __init__(self):  
        print("The second contructor")  
  
st = Student()  

输出:

The Second Constructor

在上面的代码中,对象st调用了第二个构造函数,尽管两者具有相同的配置。第一个方法对st对象不可访问。在内部,如果类有多个构造函数,类的对象始终会调用最后一个构造函数。

注意:Python不允许构造函数重载。

Python内置类函数

类中定义的内置函数在以下表中进行了描述。

SN函数描述
1getattr(obj,name,default)用于访问对象的属性。
2setattr(obj, name,value)用于将特定值设置为对象的特定属性。
3delattr(obj, name)用于删除特定属性。
4hasattr(obj, name)如果对象包含某个特定属性,则返回True。

示例

class Student:  
    def __init__(self, name, id, age):  
        self.name = name  
        self.id = id  
        self.age = age  
  
    # creates the object of the class Student  
s = Student("John", 101, 22)  
  
# prints the attribute name of the object s  
print(getattr(s, 'name'))  
  
# reset the value of attribute age to 23  
setattr(s, "age", 23)  
  
# prints the modified value of age  
print(getattr(s, 'age'))  
  
# prints true if the student contains the attribute with name id  
  
print(hasattr(s, 'id'))  
# deletes the attribute age  
delattr(s, 'age')  
  
# this will give an error since the attribute age has been deleted  
print(s.age)  

输出:

John
23
True
AttributeError: 'Student' object has no attribute 'age'

内置类属性

除了其他属性之外,Python类还包含一些内置类属性,它们提供关于类的信息。

内置类属性在下表中给出。

SN属性描述
1dict提供包含类命名空间信息的字典。
2doc包含类文档的字符串。
3name用于访问类名。
4module用于访问定义此类的模块。
5bases包含包括所有基类的元组。

示例

class Student:    
    def __init__(self,name,id,age):    
        self.name = name;    
        self.id = id;    
        self.age = age    
    def display_details(self):    
        print("Name:%s, ID:%d, age:%d"%(self.name,self.id))    
s = Student("John",101,22)    
print(s.__doc__)    
print(s.__dict__)    
print(s.__module__)  

输出:

None
{'name': 'John', 'id': 101, 'age': 22}
__main__

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程