写点什么

软件测试|Python 基础之面向对象(二)

  • 2023-09-15
    北京
  • 本文字数:3142 字

    阅读完需:约 10 分钟

面向对象的编程思想

面向对象是一种编程思想,用这种思想为指导设计的程序,把数据和对数据的操作封装在一起组成类,通过类来创建对象,通过对象之间的交互来实现程序的功能。


面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用

面向过程编程

  • 面向过程即流程

  • 在以上所学习的编程中,我们都是在按照固定的流程解决问题,制定一个结果,在奔向结果的过程中编写代码,以达到我们所需要的结果

  • 需要例举出每一步流程 随着流程的深入 结果慢慢浮现


面向对象编程

  • 对象即容器,数据与功能的结合体 (python 中一切皆对象)

  • 类似于开放式游戏,制定出游戏人物的(对象)

  • 该人物未来会如何发展,全看用户如何控制,和我们程序员没有关系


上述两种编程思想没有优劣之分 需要结合实际需求而定如果需求是注册 登录 人脸识别肯定面向过程更合适如果需求是游戏人物肯定是面向对象更合适实际编程两种思想是彼此交融的 只不过占比不同

面向对象

  1. 类与对象


对象:


  • 数据与功能的结合体

  • 是由类创建出来的一个具体存在,可以直接使用;由哪一个类创建出来的对象,该对象就具有在那一个类中定义的属性和方法


类:


  • 多个对象相同数据和功能的结合体

  • 是对一群具有相同特征或者行为的事物的一个统称,不能直接使用;特征被称为属性;行为被称为方法



  1. 创建类与对象


现实中一般是先有对象再有类程序中如果想要产生对象 必须要先定义出类


1、语法结构


class 类名:  '''代码注释'''  对象公共的数据  对象公共的功能
1.class是定义类的关键字2.类名几乎和变量名一致,使用的时候推荐类名的首字母大写3.数据: 变量名与数据值的绑定 功能: 功能(方法)其实就是具有一定功能的函数
复制代码


2、定义与调用


需求:


  • 大学选课系统


'''  类在定义阶段就会执行类函数体代码但类的函数体代码外界无法直接调用'''
1、定义类class Student: # 对象公共的数据 school_name = '清华大学' # 对象公共的功能 def choice_course(self): print('学生选课功能')
复制代码


查看类的名称空间:


  • 在面向对象中,类和对象访问数据或者功能,可以统一采用句点符


print(Student.__dict__) # {'__module__': '__main__', 'school_name': '清华大学', 'choice_course': <function Student.choice_course at 0x0000018FCCCD5670>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
print(Student.__dict__.get('school_name'))# 清华大学
print(Student.__dict__ .get('choice_course'))# <function Student.choice_course at 0x000001417B975670>
复制代码


类的调用:


  • 类加括号就会产生对象,并且每调用一次就会产生一个全新的对象

  • 变量名 obj 接收类名加括号之后的返回值(结果)


1、调用对象    obj1 = Student()      # <__main__.Student object at 0x000001992C2759D0>     obj2 = Student()    # <__main__.Student object at 0x000001992C278E50>    obj3 = Student()    # <__main__.Student object at 0x000001992C278E20>'''三个变量名的地址各不相同,产生三个对象 '''
2、查看对象内部数据 print(obj1.__dict__, obj2.__dict__, obj3.__dict__) # {} {} {}'''三个对象各自内部都为空 '''
3、调用对象共同数据 print(obj1.school_name) # 清华大学 print(obj2.school_name) # 清华大学 print(obj3.school_name) # 清华大学'''同一类产生的对象,都可使用类内部公用数据值'''
复制代码


数据和功能可称统称为属性:数据>>>属性名功能>>>方法


  1. 对象独有数据


​ 在上述使用类产生对象时,我们可以看出产生的对象并没有自己特有的数据,针对如何给对象手动添加独有数据,python 提供了多种方式,其中前 4 种方式主要为推导第五种方式而来,我们只需简单了解即可,在日后我们重点使用的是第五种方式


第一种:


  • 通过__ dict __ 加中括号的方式


obj1.__dict__['name'] = 'jason'obj1.__dict__['age'] = 18obj1.__dict__['hobby'] = 'study'
复制代码


第二种:


  • 将对象独有的数据提前封装成函数,在后续添加的时候,通过传参的方式进行添加


def init(obj,name,age,hobby)    obj.__dict__['name'] = name    obj.__dict__['age'] = age    obj.__dict__['hobby'] = hobby    init(ojb1.'kangkang', 18, 'read')init(ojb2, 'zhangzhang', 28, 'ball')
复制代码


第三种:


  • 将封装数据的函数放在类的内部,只有相同类的对象才有资格使用


class Student:    # 对象公用的数据    school_name = '清华大学'
# 专门给学生添加独有数据的功能 def init(obj, name, age, hobby): obj.__dict__['name'] = name obj.__dict__['age'] = age obj.__dict__['hobby'] = hobby # 对象公共的功能 def choice_course(self): print('学生选课功能') stu1 = Student()Student.init(stu1, 'kangkang', 18 , 'read')Student.init(stu2, 'zhangzhang', 28 , 'ball')
复制代码


第四种:


  • 将封装独有功能的函数名替换成__ init __ 这种方式,在我们给对象添加独有功能时,可自动触发


class Student:    # 对象公用的数据    school_name = '清华大学'
# 专门给学生添加独有数据的功能 def __init__(obj, name, age, hobby): obj.__dict__['name'] = name obj.__dict__['age'] = age obj.__dict__['hobby'] = hobby # 对象公共的功能 def choice_course(self): print('学生选课功能')
stu1 = Student('kangkang', 18, 'read')Stu2 = Student('zhangzhang', 28, 'ball')
复制代码


第五种:


  • 封装独有数据的函数体的第一个参数位置修改为 self

  • 在使用类产生对象时直接在类的括号内填入独有数据

  • 这种方式是我们日后使用类产生独有数据对象的主要方式


class Student:    # 对象公用的数据    school_name = '清华大学'
# 专门给学生添加独有数据的功能 def __init__(self, name, age, hobby): self.__dict__['name'] = name self.__dict__['age'] = age self.__dict__['hobby'] = hobby # 对象公共的功能 def choice_course(self): print('学生选课功能')
stu1 = Student('kangkang', 18, 'read')stu1 = Student('zhangzhang', 18, 'ball')
复制代码


  1. 对象独有功能


上述学习了如何给相同类对象添加独有数据的方式,下面我们要学习如何给对象添加独有功能


思考:


  • 1、直接将功能函数体代码定义在全局名称空间种,那么该功能函数就不对象独有的功能

  • 2、将功能函数体代码放在类中,但是类中的函数体功能,只要是此类产生的对象都可调用


解决方法:


  • 定义在类中的功能,默认就是给类产生的对象使用的,只要是此类产生的对象都可以使用

  • 需要在功能函数形参数内填入 self,之后只需要用类名’点‘函数名的方式,函数参数内填入调用对象名,就可直接使用该功能


class Student:    # 对象公用的数据    school_name = '清华大学'
# 专门给学生添加独有数据的功能 def __init__(self, name, age, hobby): self.__dict__['name'] = name self.__dict__['age'] = age self.__dict__['hobby'] = hobby # 对象公共的功能 def choice_course(self): print('学生选课功能') stu1 = Student()Student.choice_course(stu1)
复制代码


  1. 补充知识


  • 对象数据值修改


# 只需要使用对象‘点’的数据绑定的变量名的方式重新赋值即可stu1.name = 'zhaozhao'
# 当名字不存在的情况下,将直接新增数据stu1.paw = 123
复制代码


获取更多技术资料,请点击!

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
软件测试|Python基础之面向对象(二)_霍格沃兹测试开发学社_InfoQ写作社区