无涯教程-Python - 构造函数

100 阅读4分钟

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

在C ++或Java中,构造函数与其类具有相同的名称,但在Python中对构造函数的对待不同。它用于创建对象。

构造函数可以有两种类型。

  1. 参数化构造函数
  2. 非参数构造函数

创建构造函数

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

根据 __ init __()的定义,在创建类对象时可以传递任意数量的参数。它主要用于初始化类属性。每个类都必须具有一个构造函数,即使它仅依赖于默认构造函数也是如此。

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

class Employee:
    def __init__(self, name, id):
        self.id = id
        self.name = name
</span><span class="kwd">def</span><span class="pln"> display</span><span class="pun">(</span><span class="kwd">self</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"ID: %d \nName: %s"</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">self</span><span class="pun">.</span><span class="pln">id</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">self</span><span class="pun">.</span><span class="pln">name</span><span class="pun">))</span><span class="pln">

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"
</span><span class="kwd">def</span><span class="pln"> display</span><span class="pun">(</span><span class="kwd">self</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="kwd">self</span><span class="pun">.</span><span class="pln">roll_num</span><span class="pun">,</span><span class="kwd">self</span><span class="pun">.</span><span class="pln">name</span><span class="pun">)</span><span class="pln">

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
</span><span class="com"># 创建类 Student 的对象</span><span class="pln">

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__

参考链接

www.learnfk.com/python3/pyt…