面对对象编程--class and instance
首先要弄明白面对过程的编程与面对对象编程的不同。
如果有一个stu = {'name':'score'}的dict,面对过程的编程直接定义一个函数print_score('%s %s' %(stu['name'], stu['score']))即可。
我们考虑的是程序的执行流程
那么面对对象的编程首先考虑的是将student这一数据类型视为一个对象,赋予这个对象name和score的属性(property)。通过创建对象,然后向其发送指令,让其自已打印出自己的数据。
class Student(object): #定义一个抽象的class,类名通常是大写字母开头
def __init__(self, name, score): #__init__函数第一个属性永远是self,表示创建的实例本身
#再赋予属性 name,score
self.name = name #给class绑定方法,所有实例均可调用
self.score = score
def print_score(self):
print('%s, %s' %(self.name, self.score))
发送指令就是调用相关函数
Qin = Student('Qin', 666) #创建实例(对象) 通常是 类名'+'() 来创建
Qin.print_score #发送指令
传入参数时不需要传入self,Python会自动传入实例变量
上述 print_score()函数可以直接调用实例变量,不需要知道内部细节。这就是数据封装
面对对象设计思路是抽象出一个class,然后根据class创建instance。即--类是实例创建的模板
class 包含数据和操作数据的方法
访问限制
为了不让外部代码随意的修改实例的属性
例:廖雪峰Python教程习题
class Student(object):
def __init__(self, name, gender):
self.__name = name #双下划线__代表private,无法从外部访问此变量
self.__gender = gender
def set_gender(self, gender): #set_gender()方法允许外部修改,可以对参数进行检查
self.__gender = gender
def get_name(self): #get_name()允许外部获取变量
return self.__name
def get_gender(self):
return self.__gender
Qin = Student('Qin', 'female')
...#判断条件
print('%s, %s' % (Qin.get_name(), Qin.get_gender()))#注意这里output的是get_xxx()的函数返回值