Python 构造函数,构造函数是一种特殊类型的方法(函数),用于初始化类的实例成员。
在C ++或Java中,构造函数与其类具有相同的名称,但在Python中对构造函数的处理方式不同。它用于创建对象。
构造函数可以有两种类型。
- 参数化构造函数
- 非参数化构造函数
在创建该类的对象时,构造函数定义被执行。构造函数还验证对象是否有足够的资源执行任何启动任务。
在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__