Python(四)–面向对象编程
类与对象
类的定义
class 类名:
'可选的文档字符串'
类成员
文档字符串是一个可选项,用于表示这个类的描述文字,类成员是类的属性和方法,参数self是一个隐含参数,类中方法必须要使用self作为参数后面介绍.
示例:
class Plane:
'''
This is a class about Plane.
common bse class for all Planes
'''
def displayPlane(self):
pass
- Python类名有相应的命名规范:
1.类名首字母需要大写.
2.当类名由多个英文单词组成时,以大写字母分隔单词.
3.不实用下划线”_”分隔单词. - Python类的属性的命名规范:
1.使用谓词(动词+对像),说明对什么对象进行什么操作.
2.首字母小写.
3.以大写字母分隔单词. - 文档字符串(docstring)的作用是提供程序的帮助信息,可以不写.通常是一个多行字符串,首行以大写字母开始,以句号结尾,第二行是空行,第三行是详细的描述.可以通过”类名._doc_来访问”
类与对象
- 类与函数不同,不能直接使用,而是需要创建实例对象后才能访问类属性和方法.
- 对象的生命周期:
1.首先需要定义类
2.使用类创建对象,需要调用类的构造方法,构造方法的名称是_init_().创建新对象时系统会自动调用构造方法,传入新创建的对象,可以为对象的属性赋初始值.
3.访问对象成员,包括属性和方法.
4.销毁对象时调用析构方法,方法名是_del_(),传入要销毁的对象,回收对象所占用的资源.
当需要初始化属性值时,构造方法是必须使用的,而析构方法在python中是可以不使用的,由系统自动调用即可. - 在定义方法时的”self”这个参数,表示的是类实例对象本身(相当于this).”self”作为类方法定义的第一个参数是隐含参数,调用方法时,不需要传入实参.
示例:
#coding: utf-8
class Plane:
'''
This is a class about Plane.
common bse class for all Planes
'''
pCount = 0
def __init__(self,name,category):
self.name = name
self.category = category
Plane.pCount+=1
def displayPlane(self):
print "name: ",self.name," , category: ",self.category
p1 = Plane("和谐号","波音747")
p1.displayPlane()
p2 = Plane("Python","空客A380")
p2.displayPlane()
print "Plane's count is %d" % Plane.pCount
- Python允许在任何时候添加,修改或删除类和对象的属性,使用赋值运算符可以为类对象添加,修改属性值,使用del语句可以删除类对象的属性,语法格式如下:
del 类名.属性名
示例:
p1.carryNum = 350
print "p1'carryNum is ",p1.carryNum
- 类属性
类属性可分为类属性和实例属性.
类属性是与类绑定的,不依赖于对象,又称为静态属性.它不需要实例化对象,雷和对象都可访问获取其值.前面示例中qCount就是个类属性.
而实例属性存在于对象中,必须先创建对象,再访问获取其值,不能通过类访问实例属性.
当通过对象访问某个属性时,解释器会先尝试在实例命名空间中寻找.如果找不到就回去类属性中查找.
注意:使用对象访问类属性时,只能读取而不能修改.当试图通过对象给类属性赋值时,解释器会理解为给对象的实例属性赋值.如果对象没有该实例属性,会自动给对象创建一个与类属性同名的实例属性. - 内置属性
类中已经内置了一些属性和方法,任何类都可以自己访问.使用内置函数dir()可以返回类属性列表(输出类的属性).使用类的字典属性_dict_可以返回一个字典(属性的字典数据),键是属性名,值是相对应的属性对象的数据值.
类属性 | 说明 |
_dict_ | 类的命名空间 |
_doc_ | 类的文档字符串,如果没有定义,为None |
_name_ | 类名称 |
_moudule_ | 在类中定义的模块名称,交互模式其值为_main_ |
_bases_ | 一个可能是空的元组,包含了其在基类列表出现的顺序 |
_class_ | 可以获得对象所对应的类名 |
- 方法
类中定义的方法有三种,实例方法,类方法和静态方法.
1.实例方法:与类绑定且依赖于对象.
2.类方法:与类绑定,不依赖于对象,不需要实例化对象,类和其对象可以调用执行.定义类方法的语法是使用装饰器@classmethod,类方法名的参数中第一个需要使用隐含参数cls.
语法:@classmethod
类方法名(cls, 参数列表)
3.静态方法:与类方法类似,不同之处为采用了@staticmethod装饰,且没有隐含cls参数.
类的封装,继承,多态
类的封装
- 封装性
封装是蒋某些东西包装隐藏起来,让外界无法直接使用,只能通过某些特定的方法才能访问.被封装的特性只能通过特定的行为去访问,以保证对象的数据独立性,隐藏性和安全性,并且利于后期的维护. - 封装的使用
Python解释器对下划线有特殊的解释,名称前以单下划线”_”为前缀的属性和方法被解释为非公开的(),名称前以双下划线”__”作为对象属性名称前缀的属性被隐藏起来,外界将无法直接查看和修改该属性,需要通过方法对属性进行修改.
补充:”单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
“双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
类的继承
- 继承性
继承可以分为单继承和多继承,
单继承语法:
class 子类(父类):
'类文档字符串'
def __int__(self,参数列表1):
父类.__init__(self,参数列表2):
....
子类新增的类成员
示例:
class AvionPlane(Plane):
def __init__(self,_name,_categry,__gun):
Plane.__init__(self,_name,_categry)
self.__gun = __gun
def setGun(self,__gun):
self.__gun = __gun
- 继承的使用
子类对象可以调用父类的方法也可以调用自己的特有的方法.
类的多态
当调用的方法在子类和父类中同名时,会产生不同的结果,子类会优先调用自己重写后的方法.