之前写的小程序,都是按照功能需求的顺序来设计程序,这种被称为“面向过程”的编程。
还有一种程序设计方法,就是把数 据和对数据的操作用一种叫“对象”的东西包裹起来。这种被称为“面向对象”的编程,适合于较大型的程序开发。
面向对象编程有2个重要的概念:类和对象。
类就是一组相似事物的统称,是一种抽象的类型,而对象是这种类型的实例。比如,“笔”可以看成一个类,“一支圆珠笔”是“笔”这种类型的对象。
(1)类的定义和使用
(1.1)类的定义
class ClassName:#类名采用大写字母开头
‘’‘类的帮助信息’’’
statement #类体,说明方法、属性等
案例:
class Geese:#class+类名(首字母大写),用来创建类
'''大雁类'''#类的帮助信息
pass #暂时没想好属性和方法,所以用语句pass,表示一个空的代码块
onegeese=Geese() #类名加圆括号()的形式可以创建一个类的实例,也就是对象‘一只大雁’。创建类的实例的语句为:ClassName(parameterlist)
print(onegeese)
运行结果为:
<__main__.Geese object at 0x0000000002F062B0>
意思是说,onegeese是__main__模块中Geese类的一个对象,后面的一串十六进制的数字是这个对象的内存地址。
(1.2)创建__init__()方法
案例
class Geese:
'''大雁类'''
def __init__(self):#定义构造方法。self必须为第一个参数,用来表示指向实例本身的一个引用,通过它可以访问类中的属性和方法。
print('大雁类')
onegeese=Geese() #创建一个大雁类的实例
#运行结果:大雁类。
本代码中,我们只是创建了一个实例onegeese并没有输出任何信息,由此可见,当我们创建了一个类的实例时,会自动执行构造方法,输出‘大雁类’。
案例
class Rose:
'''玫瑰类'''
def __init__(self,leaf,flower):#定义构造方法。self必须为第一个参数.
print('玫瑰,具有以下特征:')
print(leaf) #叶片
print(flower) #花朵
leaf1='它的叶片为椭圆形,上面具有皱纹,颜色为深绿色,背面上长有尖刺。'#说明叶片的特征
flower1='花朵开放是在4-5月份,花朵单生在枝条顶端,颜色比较丰富,具有紫色、白色、红色等'
redrose=Rose(leaf1,flower1)#创建一个玫瑰类的实例
运行结果为:
玫瑰,具有以下特征:
它的叶片为椭圆形,上面具有皱纹,颜色为深绿色,背面上长有尖刺。
花朵开放是在4-5月份,花朵单生在枝条顶端,颜色比较丰富,具有紫色、白色、红色等
(1.3)创建类的成员并访问
类的成员包括实例方法和数据成员两部分,实例方法对应方法,数据成员对应属性。
(1.3.1)创建实例方法并访问
def functionName(self,parameterlist)
block #方法体
注意:参数self 是必须的且为第一个参数。若还需要传递其他参数,则在self后添加。
创新了实例方法后,类的实例就可以访问它:
instanceName.functionName(parametervalue)
案例
class Rose:
'''玫瑰类'''
def __init__(self,leaf,flower):#定义构造方法。self必须为第一个参数.
print('玫瑰,具有以下特征:')
print(leaf) #叶片
print(flower) #花朵
def mean(self,sign):#定义实例方法
print('玫瑰代表着:\n',sign)
leaf1='它的叶片为椭圆形,上面具有皱纹,颜色为深绿色,背面上长有尖刺。'#说明叶片的特征
flower1='花朵开放是在4-5月份,花朵单生在枝条顶端,颜色比较丰富,具有紫色、白色、红色等'
sign1='“玫瑰”一词原意是指红色美玉。长久以来,玫瑰就象征着美丽和爱情。'
redrose=Rose(leaf1,flower1)#创建一个玫瑰类的实例
redrose.mean(sign1)#调用实例方法:类的实例名.实例方法名(参数值)
运行结果为:
玫瑰,具有以下特征:
它的叶片为椭圆形,上面具有皱纹,颜色为深绿色,背面上长有尖刺。
花朵开放是在4-5月份,花朵单生在枝条顶端,颜色比较丰富,具有紫色、白色、红色等
玫瑰代表着:
“玫瑰”一词原意是指红色美玉。长久以来,玫瑰就象征着美丽和爱情。
(1.3.2)创建数据成员并访问
数据成员也称为属性,分为类属性和实例属性。
其中,类属性定义在类中,并且在方法体外的属性,可以在所有实例之间共享值。用类名.属性名的形式进行调用。
对于上面(1.3.1)的案例,可以用类属性编写代码:
class Rose:
'''玫瑰类'''
leaf='它的叶片为椭圆形,上面具有皱纹,颜色为深绿色,背面上长有尖刺。'#定义类属性(叶片)
flower='花朵开放是在4-5月份,花朵单生在枝条顶端,颜色比较丰富,具有紫色、白色、红色等。'#定义类属性(花朵)
sign='“玫瑰”一词原意是指红色美玉。长久以来,玫瑰就象征着美丽和爱情。'#定义类属性(寓意)
def __init__(self):#定义构造方法
print('玫瑰,具有以下特征:')
print(Rose.leaf) #类名.属性名以调用类属性(叶片)
print(Rose.flower) #调用类属性(花朵)
print('玫瑰代表着:\n',Rose.sign) #调用类属性(寓意)
redrose=Rose()#创建一个玫瑰类的实例
玫瑰,具有以下特征:
它的叶片为椭圆形,上面具有皱纹,颜色为深绿色,背面上长有尖刺。
花朵开放是在4-5月份,花朵单生在枝条顶端,颜色比较丰富,具有紫色、白色、红色等。
玫瑰代表着:
“玫瑰”一词原意是指红色美玉。长久以来,玫瑰就象征着美丽和爱情。
**对于上面(1.3.1)的案例,还可以用实例属性编写代码:
实例属性定义在类中,并且在方法体内的属性,只作用于当前实例。
案例:
class Rose:
'''玫瑰类'''
def __init__(self):#定义构造方法
self.leaf='它的叶片为椭圆形,上面具有皱纹,颜色为深绿色,背面上长有尖刺。'#实例属性(叶片)
self.flower='花朵开放是在4-5月份,花朵单生在枝条顶端,颜色比较丰富,具有紫色、白色、红色等。'#实例属性(花朵)
self.sign='“玫瑰”一词原意是指红色美玉。长久以来,玫瑰就象征着美丽和爱情。'#实例属性(寓意)
print('玫瑰,具有以下特征:')
print(self.leaf )#访问实例属性(叶片)
print(self.flower)
print('玫瑰代表着:\n',self.sign)
redrose=Rose()#创建一个玫瑰类的实例