Python 构造函数

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

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

默认构造函数

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

示例

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 功能 描述
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

    # 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 属性 描述
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("John",101,22)  
print(s.__doc__)  
print(s.__dict__)  
print(s.__module__)  

输出:

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程