面向对象的编程思想和Python的类,访问和属性,继承

2023-11-09

面向对象的编程思想和Python的类,类的方法和属性,实例方法
这一文从面相对象的角度,介绍类的定义,类的属性和自定义方法。

本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和Python类的继承。

在这里插入图片描述

一、访问权限:

Python中在类的内部定义属性和方法,在类的外部是可以直接调用或进行访问的。例如:

from selenium import webdriver
import time
class Commonshare:
    url = 'https://mail.126.com/'
    def __init__(self):#初始化浏览器
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
if __name__ == '__main__':
    com = Commonshare()
    com.driver.get(com.url)

url就是在类中定义的属性,在类的外部通过com的对象可以直接进行使用。因此Python中没有对属性和方法设置访问权限。为了保证类内部的某些属性不被外部访问,可以进行如下的访问限制:

1.open :收尾双下划线表示定义特殊方法,一般是系统定义的方法

2._open: 在开头加单下划线表示保护类型的成员,仅允许类本身和子类进行访问。

from selenium import webdriver
import time
class Commonshare:
    _url = 'https://mail.126.com/'
    def __init__(self):#初始化浏览器
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
if __name__ == '__main__':
    com = Commonshare()
    com.driver.get(com._url)

从以上的运行结果可以得出:保护属性可以通过实例名访问

3.__foo:双下划线表示(私有)类型的成员,只允许定义该方法的类本身进行访问,不能通过类的实例进行访问

from selenium import webdriver
class Commonshare:
    __url = 'https://mail.126.com/'
    def __init__(self):#初始化浏览器
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        print('类内部的',Commonshare._url)
if __name__ == '__main__':
    com = Commonshare()
    com.driver.get(com._Commonshare__url)#可以访问
    com.driver.get(com.__url)#不能访问
从以上的结果可以看出:私有属性可以通过“

类名.属性名”的方式访问,也可以通过"实例名.类名__url"访问。不能直接通过“实例名.属性名”访问

上文中介绍实例属性,实例属性在方法体外,是无法访问的,但是我们又想访问怎么办呢?

二、属性

(一)Python中,可通过@property(装饰器)将一个方法转为属性。转换后,可通过方法名来访问,不需要再加()访问。

class Avg_Score():# 平均成绩类

    def __init__(self,num1,num2,num3):
        self.num1=num1 #英语成绩
        self.num2=num2 #语文成绩
        self.num3=num3 #数学成绩
    @property#将方法转换为属性
    def num_avg(self): #计算机求平均数的方法
        return (self.num3+self.num2+self.num1)/3 #返回平均成绩
avg=Avg_Score(60,50,90)#创建类的实例
print('三科成绩之和为:',avg.num_avg)#类的实例,调用属性,得到属性值

不将方法转换成属性,如下,调用方法

class Avg_Score():# 平均成绩类

    def __init__(self,num1,num2,num3):
        self.num1=num1 #英语成绩
        self.num2=num2 #语文成绩
        self.num3=num3 #数学成绩
    def num_avg(self): #计算机求平均数的方法
        return (self.num3+self.num2+self.num1)/3 #返回平均成绩
avg=Avg_Score(60,50,90)#创建类的实例
print('三科成绩之和为:',avg.num_avg())#调用实例方法,得到平均值

(二)在Python中,类的属性或者实例,是可以在类体外修改的。@property将一个方法转为属性为只读属性,不能更改。如图

class Avg_Score():# 平均成绩类
    def __init__(self,num1,num2,num3):
        self.num1=num1 #英语成绩
        self.num2=num2 #语文成绩
        self.num3=num3 #数学成绩
    @property#将方法转换为属性
    def num_avg(self): #计算机求平均数的方法
        return (self.num3+self.num2+self.num1)/3 #返回平均成绩
avg=Avg_Score(60,50,90)#创建类的实例
print('三科成绩之和为:',avg.num_avg)#类的实例,调用属性,得到属性值
avg.num1=3
print(avg.num_avg)
avg.num_avg='55'#不能更改,出错
print(avg.num_avg)

面向对象的编程思想和Python的类,访问和属性,继承
三、继承

继承是面向对象编程思想的重要特征之一,继承可以实现代码的重用,同时还可以进行类之间关系的梳理。

(一)继承的语法

class 类名(父类的类名)

(二)子类调用父类的方法实现如下:

class Avg_Score():# 平均成绩类
    def __init__(self,num1,num2,num3):
        self.num1=num1 #英语成绩
        self.num2=num2 #语文成绩
        self.num3=num3 #数学成绩
    # @property#将方法转换为属性
    def num_avg(self): #计算机求平均数的方法
        return (self.num3+self.num2+self.num1)/3 #返回平均成绩

class Student_Sort(Avg_Score):#Student_Sort类继承了Avg_Score类,,
    pass
if __name__ == '__main__':
    stu=Student_Sort(99,100,80)
    print(stu.num_avg())# Student_Sort可以直接调用Avg_Score类的方法

(三)子类可以重写父类的方法

class Avg_Score():# 平均成绩类
    def __init__(self,num1,num2,num3):
        self.num1=num1 #英语成绩
        self.num2=num2 #语文成绩
        self.num3=num3 #数学成绩
    # @property#将方法转换为属性
    def num_avg(self): #计算机求平均数的方法
        print((self.num3+self.num2+self.num1)/3 ) #返回平均成绩
class Student_Sort(Avg_Score):
    def num_avg(self):#重写父类的方法
        print(self.num1+self.num2)
if __name__ == '__main__':
    stu=Student_Sort(99,100,80)
    stu.num_avg()#仅打印子类方法的结果

注意重写的方法,调用该方法时不会再进行父类方法的调用和结果显示

四、子类调用父类的__init__()方法

class Avg_Score():# 平均成绩类
    def __init__(self,num1,num2,num3):
        self.num1=num1 #英语成绩
        self.num2=num2 #语文成绩
        self.num3=num3 #数学成绩
    # @property#将方法转换为属性
    def num_avg(self): #计算机求平均数的方法
        print((self.num3+self.num2+self.num1)/3 ) #返回平均成绩
class Student_Sort(Avg_Score):
    def __init__(self):
        print("结果")
    # def num_avg(self):#重写父类的方法
    #     print(self.num1+self.num2)
if __name__ == '__main__':
    stu=Student_Sort()
    stu.num_avg()

当我们定义的属性在__init__()方法中时,子类同时改写了__init__()时,那么父类定义的方法中的属性就会找不到,出现程序错误。

面向对象的编程思想和Python的类,访问和属性,继承
(二)不重写__init__()方法,子类中的方法是可以直接使用父类的属性,例如:

class Avg_Score():# 平均成绩类
    def __init__(self,num1,num2,num3):
        self.num1=num1 #英语成绩
        self.num2=num2 #语文成绩
        self.num3=num3 #数学成绩
    # @property#将方法转换为属性
    def num_avg(self): #计算机求平均数的方法
        print((self.num3+self.num2+self.num1)/3 ) #返回平均成绩
class Student_Sort(Avg_Score):
 
    def sum(self):
        print(self.num1+self.num2)#可以使用父类的属性。
        
if __name__ == '__main__':
    stu=Student_Sort(78,89,58)
    stu.num_avg()

(三)通过super()函数调用父类中的__init()方法

class Avg_Score():# 平均成绩类
    def __init__(self,num1,num2,num3):
        self.num1=num1 #英语成绩
        self.num2=num2 #语文成绩
        self.num3=num3 #数学成绩
    def num_avg(self): #计算机求平均数的方法
        print((self.num3+self.num2+self.num1)/3 ) #返回平均成绩
class Student_Sort(Avg_Score):
    def __init__(self):
        print("结果")
        super().__init__(58,58,59)#调用父类的__init__()方法
if __name__ == '__main__':
    stu=Student_Sort()
    stu.num_avg()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面向对象的编程思想和Python的类,访问和属性,继承 的相关文章

  • 软件测试开发/全日制/测试管理丨Docker容器技术

    Docker 是一种轻量级的容器技术 通过将应用程序及其所有依赖项封装到一个可移植的容器中 实现了应用程序的便携性 可部署性和可伸缩性 下面是关于 Docker 容器技术的主要概念和优势 主要概念 容器 Container 容器是一个轻量级
  • “性能压测揭密:关键指标分析!“

    在进行全链路压测和性能测试时 需要关注多个关键性能指标 KPIs 来评估系统的性能表现 以下是一些常见的性能测试指标 1 吞吐量 Throughput 系统在单位时间内能够处理的请求数量或事务数量 通常以每秒请求数 RPS TPS 来衡量
  • JMeter 批量接口测试

    一 背景 最近在进行某中台的接口测试准备 发现接口数量非常多 有6 70个 而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值 想了几种方案后 决定尝试使用JMeter的csv读取来实现批量的接口测试 二 脚
  • 【Mysql】InnoDB 引擎中的页目录

    一 页目录和槽 现在知道记录在页中按照主键大小顺序串成了单链表 那么我使用主键查询的时候 最顺其自然的办法肯定是从第一条记录 也就是 Infrimum 记录开始 一直向后找 只要存在总会找到 这种在数据量少的时候还好说 一旦数据多了 遍历耗
  • 软件测试|Python openpyxl库使用指南

    简介 我们之前介绍过 python在自动化办公方面可以大放异彩 因为Python有许多的第三方库 其中有很多库就支持我们对office软件进行操作 熟练的使用Python对office进行操作 可以实现自动化办公 极大提升我们的工作效率 本
  • Linux终端常见用法总结

    熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率 笔者结合自身学习实践 总结以下终端用法供同行交流学习 常 见 用 法 1 快捷键 1 1 Alt 在光标位置插入上一次执行命令的最后一个参数 1 2 Ctrl R
  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联
  • Jenkins 插件下载速度慢、安装失败了!我教你怎么解决!

    Jenkins部署完毕 如果不安装插件的话 那它就是一个光杆司令 啥事也做不了 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI CD必要插件 但是问题来了 jenkins下载插件速度非常慢 而且经常提示下载插件失败 真
  • APP端网络测试与弱网模拟

    当前APP网络环境比较复杂 网络制式有2G 3G 4G网络 还有越来越多的公共Wi Fi 不同的网络环境和网络制式的差异 都会对用户使用app造成一定影响 另外 当前app使用场景多变 如进地铁 上公交 进电梯等 使得弱网测试显得尤为重要
  • 测试工程师能否作为一份「终身职业」?30岁+怎么办?

    讨论 测试工程师可否作为一份终生的职业 这是我在论坛看到的一个讨论 你的答案是什么呢 我希望大家能认真思考后给出一个属于自己的答案 无论你是新手入门 还是资深专家 回答这个问题请不要凭一腔热血 也不用过分消极 别总和钱挂钩 平心而论即可 就
  • 基于Loadrunner的性能分析及调优经验分享

    公司某个系统的微信端计划将开放给几百上千的人员登录查询 并且登录账号为同一账号多人使用 后台服务能够支撑起多用户的并发操作以及成百上千人登录微信端对生产数据库或者登录查询的性能效率高成为交付可靠生产环境的必要条件 因此 项目组决定提交测试
  • 测试用例评审流程优化

    测试用例 评审是QA日常工作流程中的关键一环 是QA同学完善测试用例 交流测试经验的好机会 负责组内测试用例建设以来 作者对于评审流程做了一些优化工作 本文作者将整个优化过程中的心得体会做了一个总结 希望能给大家带来帮助 01 原始流程 1
  • 软件测试|Python中如何提取列表中索引为奇数的元素

    简介 在Python中 我们经常需要从列表中提取特定位置的元素 如果我们想要提取列表中索引为奇数的元素 可以使用一些简单的方法来实现这一目标 本文将介绍如何在Python中提取列表中索引为奇数的元素 并提供示例代码来帮助大家更好地理解这个过
  • 软件测试|Python数据可视化神器——pyecharts教程(九)

    使用pyecharts绘制K线图进阶版 简介 K线图 Kandlestick Chart 又称蜡烛图 是一种用于可视化金融市场价格走势和交易数据的图表类型 它是股票 外汇 期货等金融市场中最常用的技术分析工具之一 可以提供关于价格变动 趋势
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯式性能指标监听

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • msyql 异常,别干着急,70%的问题都在这里!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试/测试开发/全日制/测试管理丨Android WebView 技术原理

    Android WebView是一个内置的组件 允许在Android应用中嵌套显示Web内容 Android WebView的技术原理涉及到使用WebKit引擎来渲染Web内容 并提供一系列API和回调函数 使得开发人员可以控制和定制Web
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO

随机推荐

  • [转]什么是边缘计算?

    转自 https blog csdn net gui951753 article details 80952907 注 本篇翻译自施巍松教授的论文 Edge Computing Vision and Challenges 目录 文章目录 摘
  • 工程代码_【OPPO手机进入工程模式】代码指令汇总

    来源 故乡往忆 首先要说的是 因为安卓系统版本不同 有的是安卓7 1有的是安卓8 1 因此即便都是vivo手机 可能在具体的代码指令上面 也会稍有不同 但是也都是大同小异 具体请自测 其次 工程模式是工程师测试使用的 若更改了工程模式下的设
  • BART原理简介与代码实战

    写在前面 最近huggingface的transformer库 增加了BART模型 Bart是该库中最早的Seq2Seq模型之一 在文本生成任务 例如摘要抽取方面达到了SOTA的结果 本次放出了三组不同的预训练权重 bart large 基
  • 通过STM32单片机控制直流电机实现位置速度电流PID三闭环,让电机精准控制!

    今天我们将会为大家带来一个非常实用的主题 那就是如何通过STM32单片机控制直流电机实现位置速度电流PID三闭环 让电机精准控制 首先 我们需要准备一台直流电机和一块STM32单片机开发板 接下来 我们将会通过C语言代码来实现PID三闭环控
  • HTTP 413错误解决方法

    环境 Ubuntu 16 04 nginx 1 5 6 通过post上传文件过大时 会出现413错误码 前端打开开发者模式 在输出台的位置会出现 Failed to load resource the server responded wi
  • 教你如何用VB做控件*.ocx

    教你如何用VB做控件 ocx 一个控件有很多事件如 Click MouseDown MouseUp MouseMove等 要触发这些事件都需要你加入代码 在控件的声明处加入Public Event Click 就表明该控件有一 Click
  • win7安装linux子系统,linux系统装win7系统安装教程【图文教程】

    说到linux系统可能很多人都不是特别的了解 因为在我们接触电脑用的最多的还是Windows系统 linux系统是一个基于POSIX多用户和多任务的一种CPU操作系统 但是一般人在选择的时候 还是会倾向于Windows系统 那么对于电脑安装
  • Linux下搭建zabbix的客户端,zabbix客户端linux下安装

    一 自定义安装zabbix agentd 临时目录 mkdir mnt tmp cd mnt tmp 下载zabbix管理程序 因为里面有我们要使用的客户端配置文件 建议单独保存 不然每次都下 可不好玩 wget http ncu dl s
  • 全球及中国航空发动机市场动态前景及十四五项目专项调研报告2021-2027年版

    全球及中国航空发动机市场动态前景及十四五项目专项调研报告2021 2027年版 HS HS HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年10月 搜索鸿晟信合研究院查看官网更多内容 第一章 航空
  • 使用LSTM进行预测,有一对一、多对一、多对多的预测,其中有一些疑问一起探讨(一)

    数据说明 我的数据是1万6千多的数据 想用4个特征 这个特征未加输出 预测2个输出 也就是多对多的预测 使用LSTM 一对一的预测 先用对一的预测简单一些 就是用一段时序数据取预测 代码例子看的MATLAB工具箱的例子 代码测试可行 大致看
  • 深入浅出MYSQL索引实现机制

    一 什么是索引 提到数据库索引 我想你并不陌生 在日常工作中会经常接触到 比如 我们的某一个SQL查询语句响应很慢 你可能第一反应是 给这个SQL 加个索引吧 那么到底什么是索引昵 今天我们就来聊一下这个话题 本文以MYSQL 5 6 为例
  • Redis使用总结(二、缓存和数据库双写一致性问题)

    首先 缓存由于其高并发和高性能的特性 已经在项目中被广泛使用 在读取缓存方面 大家没啥疑问 都是按照下图的流程来进行业务操作 但是在更新缓存方面 对于更新完数据库 是更新缓存呢 还是删除缓存 又或者是先删除缓存 再更新数据库 其实大家存在很
  • Flutter 升级2.5之后报错?

    Q Flutter执行命令升级新版本后 用flutter doctor命令检查时存在如下问题 按照提示键入命令后 再次出现报错 A 当我们升级SDK后 执行flutter doctor 这里是提示我们需要安装Android开发的命令行工具
  • iPhone/iPad用iTunes“同步”不等于“备份”

    一个很 基础 却很 重要 很多人 搞不清楚 解释又很花时间的问题 就是 iPhone 跟电脑 iTunes 同步 和 备份 有什么不同 首先 Sync 翻译成中文 同步 本来就是一个定义 认知有点模糊的中文动词 尤其对电脑不是很熟悉的朋友
  • Java 构造函数的详解

    我们人出生的时候 有些人一出生之后再起名字的 但是有些人一旦出生就已经起好名字的 那么我们在java里面怎么在对象一旦创建就赋值呢 1 构造方法的作用 构造方法作用 对对象进行初始化 如图 2 构造函数与普通函数的区别 1 一般函数是用于定
  • CTF工具压缩包爆破神器Fcrackzip详细用法

    Fcrackzip简介 Fcrackzip是一款专门破解zip类型压缩文件密码的工具 工具小巧方便 破解速度快 能使用字典和指定字符集破解 适用于linux mac osx 系统 Fcrackzip下载 Windows下载 下载链接 htt
  • 「爬虫教程」吐血整理,最详细的爬虫入门教程

    初识爬虫 学习爬虫之前 我们首先得了解什么是爬虫 来自于百度百科的解释 网络爬虫 又称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 通俗来讲 假如你需要互联网上
  • Spring中Bean的实例化详细流程

    还是举个例子 我有一个朋友小汪他远赴南方某城市打工 然后安定下来后他的朋友很想来家里玩 但是呢我这个朋友家里搞的很乱 所以他不好意思请朋友来家里玩 这时我的另一个朋友说那请一个保姆把家里好好整理一下就可以了 然后给他介绍了一个保姆大S PS
  • C语言 信号处理机制

    C语言中信号标示一种时间 它可能异步地发生 也就是并不与城市执行过程中的任何事件保持同步 如果程序中未设置该信号的处理函数 则选择缺省方式 大部分为终止程序运行 信号头文件
  • 面向对象的编程思想和Python的类,访问和属性,继承

    面向对象的编程思想和Python的类 类的方法和属性 实例方法 这一文从面相对象的角度 介绍类的定义 类的属性和自定义方法 本文将从访问限制 属性 继承 方法重写这几个方面继续介绍面向对象的编程思想和Python类的继承 一 访问权限 Py