Python 构造器
|字数总计:1.2k|阅读时长:5分钟|阅读量:|
Python 构造器
原文:https://www.javatpoint.com/python-constructors
构造器是一种特殊类型的方法(函数),用于初始化类的实例成员。
在 C++或 Java 中,构造器与其类同名,但在 Python 中它对构造器的处理不同。它用于创建对象。
构造器可以有两种类型。
参数化构造器
非参数化构造器
构造器定义是在我们创建这个类的对象时执行的。构造器还验证对象是否有足够的资源来执行任何启动任务。
用 python 创建构造器
在 Python 中,方法 init() 模拟类的构造器。当类实例化时调用此方法。它接受self-关键字作为允许访问类的属性或方法的第一个参数。
我们可以在创建类对象时传递任意数量的参数,这取决于 init() 的定义。它主要用于初始化类属性。每个类都必须有一个构造器,即使它只是依赖于默认的构造器。
考虑下面的例子来初始化雇员类属性。
例子
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)
emp1.display()
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: def __init__(self): print("This is non parametrized constructor") def show(self,name): print("Hello",name) student = Student() student.show("John")
|
Python 参数化构造器
参数化构造器有多个参数以及自身。考虑下面的例子。
例子
class Student: 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()
|
输出:
一个类中有多个构造器
让我们看看另一个场景,如果我们在类中声明两个相同的构造器会发生什么。
例子
class Student: def __init__(self): print("The First Constructor") def __init__(self): print("The second contructor")
st = Student()
|
输出:
在上面的代码中,对象 st 调用了第二个构造器,而两者具有相同的配置。第一种方法不能被 st 对象访问。在内部,如果类有多个构造器,该类的对象将总是调用最后一个构造器。
注意:Python 中不允许构造器重载。
Python 内置的类函数
下表描述了类中定义的内置函数。
| 序号 | 功能 | 描述 |
| one | getattr(obj,name,default) | 它用于访问对象的属性。 |
| Two | setattr(obj、name、value) | 它用于为对象的特定属性设置特定值。 |
| three | delaattr(obj,name) | 它用于删除特定属性。 |
| four | hasattr(obj,name) | 如果对象包含某些特定属性,则返回 true。 |
例子
class Student: def __init__(self, name, id, age): self.name = name self.id = id self.age = age
s = Student("John", 101, 22)
print(getattr(s, 'name'))
setattr(s, "age", 23)
print(getattr(s, 'age'))
print(hasattr(s, 'id'))
delattr(s, 'age')
print(s.age)
|
输出:
John 23 True AttributeError: 'Student' object has no attribute 'age'
|
内置类属性
除了其他属性,Python 类还包含一些内置的类属性,这些属性提供了关于该类的信息。
下表给出了内置的类属性。
序号 | 属性 | 描述 |
---|
one | dict | 它提供了包含类命名空间信息的字典。 |
Two | doc | 它包含一个包含类文档的字符串 |
three | name | 它用于访问类名。 |
four | moudle | 它用于访问定义该类的模块。 |
five | base | 它包含一个包含所有基类的元组。 |
例子
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__
|