前面一节提到类是抽象的概念集合,表示的是一个共性的产物,类中定义了类的属性和方法,而对象是类的实例。
例如前面建立的水果类,水果被归纳为类,而苹果、香蕉、葡萄为水果类的实例或对象。水果是人们赋予具有苹果、香蕉、葡萄等共同特点的名称,不单指某一事物;对象是指具体的实物或概念,如苹果、香蕉、葡萄等对象是实物,而一项政策可能就是一个概念性的对象了,在现实生活中,万事万物皆对象,面向对象编程就是模拟现实生活中的一个个对象来编程的。
类也可以看做是对象的模板,它描述一类对象的行为和状态,决定着对象的属性和方法。由对象可以抽象出类,类也可以实例化成对象,就像水果类决定了苹果、香蕉、葡萄等对象具备糖分、汁液、芳香度都基本特征,也可以通过抽取香蕉、葡萄等对象的共同特征抽象为水果类。
图 1 水果类与水果对象的关系
在图1中,由苹果、葡萄等对象抽象出水果类,水果类属性有water(汁液含量)、sugar(糖分含量)、fragrance(芳香度),这些属性是水果类所具有的共同特点。当在程序中需要使用苹果对象时,需要将水果类实例化苹果,同时初始化苹果对象的water(汁液含量)、sugar(糖分含量)、fragrance(芳香度)属性。
对象的创建
对象是根据类创建的。在Python中,将类实例化为对象非常简单。实例化对象语法如下:
对象名 = 类名();
例如:创建前面Fruits类的苹果对象
apple = Fruits("80%","30%","20%");
水果类实例化苹果对象时,会调用Fruits类的构造方法初始化对象,Fruits类的构造方法要求传入water(汁液含量)、sugar(糖分含量)、fragrance(芳香度)三个属性值,初始化对象的属性。
Fruits类的构造方法代码如下:
def __init__(self, inwater, insugar,infragrance): self.water = inwater; self.sugar = insugar; self.fragrance = infragrance;
其中,self表示类实例(对象)本身,在创建实例的时候self不需要传入,Python解释器会自己把实例变量传进去。
访问对象的属性和方法
访问对象中封装好的属性和方法是通过“.”操作符进行的。例如:
#实例化苹果对象
apple = Fruits("80%","30%","20%");
#输出苹果对象属性
print("汁液含量:%s" % (apple.getWater()));
print("糖分含量:%s" % (apple.getSugar()));
print("芳香度:%s" % (apple.getFragrance()));例1:创建一个Fruits水果类,并实例化Fruits类为apple对象,然后调用Fruits类的showFruit()方法输出Fruits对象的属性。
#定义水果类
class Fruits:
#水果类汁液含量属性
water = "";
#水果类糖分含量属性
sugar= "";
#水果类芳香度属性
fragrance = "";
#水果类构造方法(函数)
def __init__(self, inwater, insugar,infragrance):
self.water = inwater;
self.sugar = insugar;
self.fragrance = infragrance;
def getWater(self):
return self.water;
def getSugar(self):
return self.sugar;
def getFragrance(self):
return self.fragrance;
def setWatet(self,inwater):
self.water = inwater;
def setSugar(self,insugar):
self.sugar = insugar;
def setFragrance(self,infragrance):
self.fragrance = infragrance;
def showFruit(self):
print("汁液含量:%s" % (self.water));
print("糖分含量:%s" % (self.sugar));
print("芳香度:%s" % (self.fragrance));
#实例化苹果对象
apple = Fruits("80%","30%","20%");
#调用showFruit输出苹果对象属性
apple.showFruit();上面的代码声明了Fruits类。Fruits类有汁液含量(water)、糖分含量(sugar)和芳香度(fragrance)类属性,并提供了类属性的设置或获取方法,也提供了showFruit方法,该方法使用print语句输出类的属性。
在类的声明后面,使用Fruits类实例化apple对象,在类的实例化过程中,会调用Fruits类的构造方法,并传入初始化对象属性的参数,最后调用apple对象的showFruit()方法输出对象属性。
Python对象是Python类的实例化,Python类的实例化就是在代码中声明一个类型为Python类的变量,然后调用类的构造方法申请Python类的存储空间并初始化Python类的属性,被初始化的Python类赋值给前面已声明的变量,该变量即为Python类的实例化对象。