首页 > 编程语言 >软件测试|Python基础之面向对象(二)

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

时间:2023-02-03 18:32:47浏览次数:41  
标签:__ .__ name Python 面向对象 对象 Student dict 软件测试

面向对象的编程思想

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

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

面向过程编程

  • 面向过程即流程
  • 在以上所学习的编程中,我们都是在按照固定的流程解决问题,制定一个结果,在奔向结果的过程中编写代码,以达到我们所需要的结果
  • 需要例举出每一步流程 随着流程的深入 结果慢慢浮现

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

面向对象编程

  • 对象即容器,数据与功能的结合体 (python中一切皆对象)
  • 类似于开放式游戏,制定出游戏人物的(对象)
  • 该人物未来会如何发展,全看用户如何控制,和我们程序员没有关系

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

面向对象

  1. 类与对象

对象:

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

类:

  • 多个对象相同数据和功能的结合体
  • 是对一群具有相同特征或者行为的事物的一个统称,不能直接使用;特征被称为属性;行为被称为方法

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

  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'] = 18
obj1.__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


标签:__,.__,name,Python,面向对象,对象,Student,dict,软件测试
From: https://blog.51cto.com/u_15640304/6036011

相关文章

  • 软件测试|Python基础之面向对象(三)
    Python面向对象之动态静态方法动静态方法在类中定义的函数有多种特性直接在类中定义函数再类中直接定义函数,默认绑定给对象,类调用时有几个参数就要传几个参数,对象调用时该......
  • 软件测试|Python基础之面向对象(四)
    Python面向对象之继承与派生继承python三大特征封装、继承、多态三者中继承最为核心,实际应用多,感受较为直观封装和多态略微抽象继承的概念继承的含义:在现实生活中,继承表......
  • 软件测试|Python基础之模块导入和使用
    Python模块导入和使用模块1、简介本质:模块是指内部具有一定功能(代码)的py文件2、模块的表现形式1、py文件(py文件也可以称之为是模块文件)2、含有多个py文件的文件夹(按照模块功......
  • pycharm设置python头文件模版
    钢铁知识库,一个学习python爬虫、数据分析的知识库。人生苦短,快用python。使用pycharm创建python文件时候,有时候需要自动生成想要的文件头,如何生成呢?只需要以下几步:在f......
  • python之路61 drf从入门到成神 4 反序列化类校验部分源码解析、断言、drf请求、响应格
    反序列化类校验部分源码解析#反序列化校验、什么时候开始执行校验视图类中的ser.is_valid(),就会执行校验,校验通过返回True,不通过返回False#入口:ser.is_valid......
  • python-json的自定义编码器与自定义解码器
    json的数据类型有限,在实际业务中可能会遇到数据无法使用JSON编码的问题。如果我们需要转发的数据有大量或位置不规则的json无法解析数据类型时,事先处理就变成了一件比较麻......
  • 【Azure Cache for Redis】Python Djange-Redis连接Azure Redis服务遇上(104, 'Connec
    问题描述使用Python连接AzureRedis服务,因为在代码中使用的是Djange-redis组件,所以通过如下的配置连接到AzureRedis服务:CACHES={"default":{"BACKEND":"dj......
  • Python 异步: 什么是事件循环 ?(6)
    asyncio程序的核心是事件循环。在本节中,我们将花点时间看一下asyncio事件循环。1.什么是Asyncio事件循环事件循环是用于在单个线程中执行协程的环境。事件循环是异......
  • Python---- 一闭三器
    一闭三器闭包装饰器迭代器生成器闭包保证数据安全闭包结构内层函数对外层函数的局部变量的使用,内层函数被称为闭包函数闭指的是:该函数的内部函数包......
  • Java基础之面向对象——抽象类、接口、枚举
    抽象类     越是处于顶层定义的类,实际上可以进一步地进行抽象。抽象类里可以有抽象方法(也可以没有)。抽象类完全由子类来实现,父类中不需要提供实现。例如,对于该父类......