第28天:两大编程思想、类与对象及其属性

         在编程中,面向过程和面向对象是编程的两大编程思想。

          所有的程序都是由”数据”与“功能“组成,因而编写程序的本质就是定义出一系列的数据,然后定义出一系列的功能来对数据进行操作。

          在学习”对象“之前,程序中的数据与功能是分离开的。在学习了“对象”之后,我们就有了一个容器,该容器可以盛放数据与功能,所以对象是把数据与功能整合到一起的产物。      

面向过程:

                 面向过程中过程是核心,过程就是先干什么、在干什么、最后干什么,就是机械式的思维方式,之前写的ATM项目都是面向过程的。

                 例1:把大象放冰箱

                1. 打开冰箱门
                2. 把大象放进冰箱
                3. 关上冰箱门

                例2:输入用户名和密码注册校验

                1. 先让用户输入用户名和密码
                2. 验证参数
                3. 直接把数据写入文件中

                优点:复杂的问题简单化、进而流程化
                缺点:扩展性差,牵一发而动全身
                应用场景: 一般用在对扩展性要求比较差的情况

面向对象:

                面向对象中对象是核心,对象就是一个盛放数据与功能的容器/箱子/盒子

                例:学生选课系统

                系列中有哪些角色:
                        学生
                        老师
                        管理员
                        选课功能
                        ...

                优点:扩展性强
                缺点:简单的问题复杂化了

类的定义

                概念:类是用来存放多个对象相同的数据与功能的容器,即一系列相似的特征和相似的技能的结合体。

                语法(与函数作比):

def index():
   pass

class Student():
   pass

                 原理:

1. 类一旦定义完成,会立马执行类体代码
2. 会产生类的名称空间,其实就是一个大字典,然后把类中得名字都丢到类的名称空间去
3. 把类的名称空间绑定给 类名.__dict__中

                注意事项:

1. 关键字使用class来声明
2. class后面写的是类名,类名的命名:一般情况下遵循变量的命名规范即可,类名一般首字母都要大写,(小写也行,但是不推荐)
3. 如果你的类名比较长,推荐使用驼峰法,并且是大驼峰
4. 类名后面的小括号不能省略

                类与对象的关系:

第28天:两大编程思想、类与对象及其属性_第1张图片

                在程序中,必须要事先定义类,然后再调用类产生对象(调用类拿到的返回值就 是对象)。产生对象的类与对象之间存在关联,这种关联指的是:对象可以访问到类中共有的数据与功能,所以类中的内容仍然是属于对象的,类只不过是一种节省空间、减少代码冗余的机制,面向对象编程最终的核心仍然是去使用对象。

对象的产生

                在程序中定义出类,然后调用类就是产生对象的过程。调用类的过程称为将类实例化,拿到的返回值就是程序中的对象,或称为一个实例。

                定义一个学生类:

class Student():
    school = 'SH' 
    def choose_cource(self, cource):
        self.cources.append(cource)
        print('%s选课%s成功' % (self.name, self.cources))

                查看学生类的名称空间:

print(Student.__dict__)

                实例化学生类,产生对象:

stu = Student()

                查看对象的名称空间:

print(stu.__dict__)

类与对象的属性

                在类中定义的名字,都是类的属性,细说的话,类有两种属性:数据属性和函数属性,可以通过__dict__或点语法访问属性的值。

                __dict__访问类属性:

print(Student.__dict__['school'])

                点语法访问类属性:

print(Student.school)

             同理, 点语法也可以访问对象属性,在访问对象属性前先在类中添加初始化方法

class Student():
    school = 'SH' 

    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        self.name = name 
        self.age = age 
        self.gender = gender 
        self.courses = course 

    def choose_cource(self, cource):
        self.cources.append(cource)
        print('%s选课%s成功' % (self.name, self.cources))

                 点语法访问对象属性

print(stu.name)

                 类与对象属性的增删改:

                        类属性的增加:

Student.x = 'xxx'
Student.z = 666

                        类属性的删除:

del Student.school

                        类属性的修改:  

Student.school = 'BJ'

                        对象属性的增加:

stu.x = 666

                        对象属性的删除:

stu.x = 888

                        对象属性的修改:

del stu.x

                属性查找顺序

        1.如果使用的是点语法,那么,对象查找属性的时候,先从对象自己的名称空间中查找,如果找不到,就去产生这个对象的类中查找

        2.如果你使用的__dict__取值,只能够取到对象自己名称空间中得属性,不会去类中查找

你可能感兴趣的:(开发语言,python)