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

复制代码

一、访问权限:

Python中在类的内部定义属性和方法,在类的外部是可以直接调用或进行访问的。例如:from selenium import webdriverimport timeclass 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 webdriverimport timeclass 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 webdriverclass 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=3print(avg.num_avg)avg.num_avg='55'#不能更改,出错print(avg.num_avg)复制代码

三、继承

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

(一)继承的语法

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类,, passif __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__()时,那么父类定义的方法中的属性就会找不到,出现程序错误。

(二)不重写__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()复制代码

python完全支持面向对象编程思想_面向对象的编程思想和Python的类,访问和属性,继承...相关推荐

  1. Java编程题_面向对象和常用API01_B级

    Java编程题_面向对象和常用API01_B级 第1题 面向对象.异常.集合.IO 题干: 请编写程序,完成键盘录入学生信息,并计算总分将学生信息与总分一同写入文本文件 需求:键盘录入3个学生信息(姓 ...

  2. [Linux驱动之路] 驱动设计的思想_面向对象_分层_分离—程序扩展

    韦东山老师的Linux驱动设计基础课程的p128 5_101 驱动设计的思想_面向对象_分层_分离这课在开发板上实作练习,可控制imx6ull_pro板子的LED开关. 基于韦老师代码的基础上,更改如 ...

  3. java基础2:this、static、final、abstract关键字、代码块、生成API工具包、继承、多态、方法重载和重写,抽象类、接口、常见异常、java权限修饰符、选择排序思想和程序和内部类

    1.this关键字 this表示当前类对象的地址空间值的引用.就是说,this代表了new出来的对象 其最大作用就是解决了构造器中局部变量隐藏成员变量.即用this.变量名 = 变量名 区分. 2.s ...

  4. python完全支持面向对象编程思想_面向对象的编程思想和Python的继承和多态,特殊方法,引用计数...

    面向对象的编程思想和Python的类,访问和属性,继承 在上一文中我们了解到了,私有的属性的访问方式:实例名._类名__私有属性名. 一.私有的属性如何对外提供公有的取值和赋值方法呢?提供公有的方法作 ...

  5. python标准库很丰富支持多种编程范式_基础班-第03天{python基础}

    声明:内容来源于网络,本人只是在此稍作整理,如有涉及版权问题,归传智播客官方所有. 认识python(了解) 1.Python发展历史 起源 Python的作者,Guido von Rossum,荷兰 ...

  6. python是一种面向对象的高级语言_为什么入门大数据选择Python而不是Java?

    马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...

  7. python支持函数式编程吗_利用Fn.py库在Python中进行函数式编程

    尽管Python事实上并不是一门纯函数式编程语言,但它本身是一门多范型语言,并给了你足够的自由利用函数式编程的便利.函数式风格有着各种理论与实际上的好处(你可以在Python的文档中找到这个列表): ...

  8. 支持所有库的python手机编程软件_有了这个软件,Python新手可以随时随地用手机练习编程了...

    很多小伙伴想利用空闲时间学习Python,但是有时候身边没有电脑,今天就给大家推荐一款手机APP:QPython. Qpython是一个Python引擎,只能运行在安卓系统上,内置了一个Python编 ...

  9. java面向对象的理解_面向对象及其核心的概念:抽象、继承与多态、封装

    面向对象的思想是上个世界60年代出现的,一些比较典型的面向对象的编程语言包括JAVA.C++等.很多脚本语言也支持面向对象的语法比如PHP.Python. 什么是面向对象呢?它是一种现实对象的建模方法 ...

  10. python语言支持苹果系统吗_Mac系统上的一款Python编程平台

    原标题:Mac系统上的一款Python编程平台 Python for Mac是Mac系统上的一款Python编程平台,由IDLE与Python Launcher两部分组成.Python支持多种编程技术 ...

最新文章

  1. 目标检测(Google object_detection) API 上训练自己的数据集
  2. react中使用create-react-app创建项目执行函数两次
  3. 数据结构:用栈实现中缀表达式的求值(文字描述+详细步骤示例)
  4. 好轮子收藏:一个支持几乎所有流行格式的图像加载库stb_image.h
  5. 成毅高清电脑桌面壁纸
  6. Android Studio 初探
  7. php表单美化,使用css美化html表单控件详细示例(表单美化)_HTML/Xhtml_网页制作
  8. 利用python脚本将微信聊天信息提取到txt文件
  9. 微信策划推出指纹支付
  10. Android FBReader基础资料文档
  11. 对其他小组的评价和建议
  12. Linux:进程(一)
  13. wordpress使用又拍云存储实现CDN加速使用心得
  14. js 时间转东八区_js将UTC时间转化为当地时区时间
  15. 第二章、小实例,画字,画线,矩形,画图,动画(iOS学习笔记,从零开始。)
  16. [CTF] SQL注入的一些经验总结(未完待续)【更新:2022.11.25】
  17. 两万文字多图详解常用软件工具使用(持续更新)
  18. 让你的努力配得上你的梦想书摘
  19. 【Python百日进阶-数据分析】Day325 - plotly.express.scatter_3d():3D散点图
  20. GIS 地质灾害评价——易发性评价方法的选择

热门文章

  1. Spring自学日志07(整合Mybatis)
  2. java StringUtils方法全览
  3. EasyUI Numberbox 数字框(限制仅输入数字)
  4. echarts 柱状图颜色_echarts的实战案例一些(二)
  5. vcpkg安装_[工具]包管理工具Vcpkg 的使用
  6. 字符串匹配(一)—— KMP / MP
  7. 超级终端软件哪个好_同城配送软件哪个好?如何选择配送软件?
  8. Kooteam 0.2.0 发布,新增周报、日报功能
  9. 利用Python定时给女友微信发送今日天气情况,异地恋维护感情神器
  10. nginx 80端口重定向到443端口