构造函数是一种特殊的方法(函数),用于初始化类的实例成员。
在C ++或Java中,构造函数与其类具有相同的名称,但在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("Learnfk", 101) emp2 = Employee("David", 102) # 访问 display() 方法以打印员工 1 信息 emp1.display() # 访问 display() 方法以打印员工 2 信息 emp2.display()
输出:
ID: 101 Name: Learnfk 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
当不想操纵值或仅以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("Learnfk")
参数化的构造函数具有多个参数以及 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("Learnfk") student.show()
输出:
This is parametrized constructor Hello Learnfk
当不在类中包含构造函数或忘记声明它时,它将成为默认构造函数。它不执行任何任务,而是初始化对象。考虑以下示例。
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 对象无法访问第一种方法。在内部,如果类具有多个构造函数,则该类的对象将始终调用最后一个构造函数。
下表中描述了该类中定义的内置函数。
SN | 功能 | 说明 |
---|---|---|
1 | getattr(obj,name,default) | 用于访问对象的属性。 |
2 | setattr(obj,name,value) | 用于将特定值设置为对象的特定属性。 |
3 | delattr(obj,name) | 它用于删除特定属性。 |
4 | hasattr(obj,name) | 如果对象包含某些特定属性,则返回true。 |
class Student: def __init__(self, name, id, age): self.name = name self.id = id self.age = age # 创建类 Student 的对象 s = Student("Learnfk", 101, 22) #打印对象 s 的属性名称 print(getattr(s, 'name')) # 将属性 age 的值重置为 23 setattr(s, "age", 23) #打印年龄的修改值 print(getattr(s, 'age')) #如果学生包含名称为 id 的属性,则打印 true print(hasattr(s, 'id')) # 删除属性年龄 delattr(s, 'age') # 这将给出一个错误,因为属性年龄已被删除 print(s.age)
输出:
Learnfk 23 True AttributeError: 'Student' object has no attribute 'age'
除了其他属性,Python类还包含一些内置的类属性,这些属性提供有关该类的信息。
下表列出了内置的类属性。
SN | 属性 | 说明 |
---|---|---|
1 | __ dict __ | 它提供了包含有关类名称空间信息的字典。 |
2 | __ doc __ | 它包含一个带有类文档的字符串 |
3 | __ name __ | 用于访问类名。 |
4 | __ module __ | 用于访问在其中定义了此类的模块。 |
5 | __ bases __ | 它包含一个包含所有基类的元组。 |
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("Learnfk",101,22) print(s.__doc__) print(s.__dict__) print(s.__module__)
输出:
None {'name': 'Learnfk', 'id': 101, 'age': 22} __main__
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)