小菜鸟学习Python之路--OOP(1)

面对对象编程--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()的函数返回值
                                                    

 

你可能感兴趣的:(Python,学习)