07-Python面对对象初级
一、简介
面对过程编程: 根据操作数据的函数或语句块来设计程序。
面对对象编程:把一些函数,数据,方法和功能结合起来,用“对象”包裹组织程序的一种方法。
类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类
的实例。
二、类的定义
Class 类名:
类体
在这个类的定义中,需要注意:
1. 类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。
2. 类体中我们可以定义属性和方法。
3. 属性用来描述数据,方法(即函数)用来描述这些数据相关的操作。
下面我们简单看一个类的定义
>>>class Student:
… def __init__(self, name, age): #构造方法第一个参数必须为self
… self.name = name #实例属性
… self.age = age
… def know(self): #实例方法
… print('my name is {},and I\'m {}'.format(self.name,self.age) )
>>>Student('wanger', 18).know()
my name is wanger,and I'm 18
三、__init__方法
__init__ 方法在类的一个对象被建立时,该方法在类实例化时会自动调用
__init__方法要注意:
1. 名称固定,必须为__init__(),起始和结束必须是双下划线。
2. 第一个参数固定,必须存在一个参数,一般为:self,self指刚创建好的实例对象。
3. 构造函数通常用来初始化实例对象的实例属性。
4.通过类名调用构造函数,类名调用即开始自动调用构造函数,一般为:类名(参数列表)
- 实例属性和实例方法:
实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用如下:
1. 实例属性一般在__init__()方法中通过如下代码定义:
self.实例属性名= 初始值
2. 在本类的其他实例方法中,也是通过self 进行访问:
self.实例属性名
3. 创建实例对象后,通过实例对象访问:
a = 类名() #创建对象,调用__init__()初始化属性
a.实例属性名= 值 #可以给已有属性赋值,也可以新加属性
实例方法是从属于实例对象的方法。实例方法的定义格式如下:
def 方法名(self , 形参列表):
函数体
方法的调用格式如下:
对象.方法名(实参列表)
- 类的方法
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
#类定义 class People: # 定义基本属性 n = 'Bob' a = 0 # 定义私有属性,私有属性在类外部无法直接进行访问 __w = 0 # 定义构造方法 def __init__(self, n, a, w): self.a = a self.__w = w def know(self): print("%s say: I’m %d years old。" % (self.n, self.a)) # 实例化类 a = People('',18,50) a.know()
输出结果为:Bob say: I’m 18 years old。(没有给a赋值则默认为基本属性里的值)
四、私有属性和私有方法
- 类的私有属性
两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__参数名。
- 类的私有方法
两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。
class Student: # 定义基本属性 n = 'Bob' a = 0 # 定义私有属性,私有属性在类外部无法直接进行访问 __w = 0 # 定义构造方法 def __init__(self, n, a, w): self.n = n self.a = a self.__w = w def know(self): #类内部可以直接调用 print('my weight is: ',Student.__w ) print("%s say: I’m %d years old。" % (self.n, self.a)) #定义私有方法 def __myself(self): print('my weight is 55') my = Student('王二', 18 , 55) print(my.n,my.a) #外部可以调用类属性 my.know() #调用定义方法 print(my._Student__w) #外部调用私有类属性的方法 my._Student__myself() #外部调用私有实例方法
- 类的专有方法
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__truediv__: 除运算
__mod__: 求余运算
__pow__: 乘方
- 属性和方法命名总结
_xxx:保护成员,不能用“from module import * ”导入,只有类对象和子类对象能访
问这些成员。
__xxx__:系统定义的特殊成员
__xxx: 类中的私有成员,只有类对象自己能访问,子类对象也不能访问。(在类外
部可以通过“对象名. _类名__xxx”这种特殊方式访问。)