Python教程-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
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 | 函数 | 描述 |
---|---|---|
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__