您的位置:首页 > 编程语言 > Python开发

Python(四)--面向对象编程

2018-03-05 22:36 218 查看

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):
父类.__ini
b381
t__(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


继承的使用

子类对象可以调用父类的方法也可以调用自己的特有的方法.

类的多态

当调用的方法在子类和父类中同名时,会产生不同的结果,子类会优先调用自己重写后的方法.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python