Python 构造函数
在面向对象编程中,类的一个对象通过一个或多个实例变量或属性来进行特征化,其值对每个对象是唯一的。例如,如果Employee类有一个名为name的实例属性。它的每个对象e1和e2可能对name变量具有不同的值。
构造函数是类中的一个实例方法,在声明类的新对象时自动调用。构造函数的作用是在对象声明时为实例变量赋值。
Python使用一个特殊的方法__init__()
来初始化对象的实例变量,一旦对象被声明就会调用它。
__init__()
方法充当构造函数。它需要一个强制参数self,它是指向对象的引用。
def __init__(self):
#initialize instance variables
__init__()
方法以及类中的任何实例方法都有一个必需参数, self 。但是,你可以给第一个参数任何名称,不一定是self。
让我们在Employee类中定义构造函数来初始化name和age作为实例变量。然后我们可以访问其对象的这些属性。
示例
class Employee:
'Common base class for all employees'
def __init__(self):
self.name = "Bhavana"
self.age = 24
e1 = Employee()
print ("Name: {}".format(e1.name))
print ("age: {}".format(e1.age))
它将产生以下内容 输出 –
Name: Bhavana
age: 24
带参数的构造函数
对于上面的Employee类,我们声明的每个对象都会有相同的实例变量name和age的值。如果要声明具有不同属性而不是默认属性的对象,请为__init__()
方法定义参数。(方法就是定义在类内部的函数。)
示例
在这个例子中,init()构造函数有两个形式参数。我们使用不同的值来声明Employee对象 −
class Employee:
'Common base class for all employees'
def __init__(self, name, age):
self.name = name
self.age = age
e1 = Employee("Bhavana", 24)
e2 = Employee("Bharat", 25)
print ("Name: {}".format(e1.name))
print ("age: {}".format(e1.age))
print ("Name: {}".format(e2.name))
print ("age: {}".format(e2.age))
它将产生以下 输出 −
Name: Bhavana
age: 24
Name: Bharat
age: 25
您可以在构造函数中为形参指定默认值,这样对象可以在传递参数或不传递参数的情况下实例化。
class Employee:
'Common base class for all employees'
def __init__(self, name="Bhavana", age=24):
self.name = name
self.age = age
e1 = Employee()
e2 = Employee("Bharat", 25)
print ("Name: {}".format(e1.name))
print ("age: {}".format(e1.age))
print ("Name: {}".format(e2.name))
print ("age: {}".format(e2.age))
它将产生以下 输出 −
Name: Bhavana
age: 24
Name: Bharat
age: 25
Python – 实例方法
除了init()构造函数之外,类中还可以定义一个或多个实例方法。带有self作为形式参数的方法被称为实例方法,因为它是由特定对象调用的。
示例
在以下示例中,定义了一个displayEmployee()方法。它返回调用该方法的Employee对象的姓名和年龄属性。
class Employee:
def __init__(self, name="Bhavana", age=24):
self.name = name
self.age = age
def displayEmployee(self):
print ("Name : ", self.name, ", age: ", self.age)
e1 = Employee()
e2 = Employee("Bharat", 25)
e1.displayEmployee()
e2.displayEmployee()
它将产生以下 输出 −
Name : Bhavana , age: 24
Name : Bharat , age: 25
您可以随时添加、删除或修改类和对象的属性 −
emp1.salary = 7000 # Add a 'salary' attribute.
emp1.name = 'xyz' # Modify 'name' attribute.
del emp1.salary # Delete 'salary' attribute.
不使用常规语句访问属性,可以使用以下函数:
- getattr(obj, name[, default]) - 访问对象的属性。
-
hasattr(obj, name) - 检查属性是否存在。
-
setattr(obj, name, value) - 设置属性。如果属性不存在,则创建。
-
delattr(obj, name) - 删除属性。
print (hasattr(e1, 'salary')) # Returns true if 'salary' attribute exists
print (getattr(e1, 'name')) # Returns value of 'name' attribute
setattr(e1, 'salary', 7000) # Set attribute 'salary' at 8
delattr(e1, 'age') # Delete attribute 'age'
它将产生以下 输出 −
False
Bhavana