OOP

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。数据封装、继承和多态是面向对象的三大特点。

类和实例

1.类,是抽象的模板,类似于 ES5 中的构造函数,只不过在 Python 中,类是通过 class 关键字来定义的,习惯上,类名首字母大写:

#class 关键字后面是 类名,紧接着是小括号,里面表示从哪个类继承
class Student(object):
pass

2.实例的创建很简单,就是类名加小括号,小括号里面可以添加类里面的参数

zx = Student()

3.类里面可以添加所有实例都拥有的属性。这是通过定义 init 方法来实现的

class Student(object):
def __init__(self,name,score):
self.name = name
self.score = score xf = Student('qxf',99) print(xf.name)
print(xf.score)

4.数据封装,通过上面方法添加的属性可以直接通过类里面的方法进行访问。

class Student():
def _init_(self,name,score):
self.name = name
self.score = score
def show(self):
print(self.name,'的成绩是',self.score) qq = Student('jq',99) qq.show()

访问限制

我们可以通过在属性名面前添加“__” 的方式来定义私有属性,私有属性不能通过实例对象直接访问

class NewObj():
def __init__(self,name,score):
self.__name = name
self.__score = score newZx = NewObj('zx',99) #会报错
print(newZx.__name)

关于继承

当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。子类可以直接调用父类的方法。

class Animal():
def __init__(self,name='Animal'):
self.name = name
def run(self):
print(self.name) class Cat(Animal):
pass cat = Cat('cat')
cat.run() #cat

关于多态

当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态。对于上面的代码,如果为子类添加一个新的 run 方法,代码调用的时候总会调用子类的方法。

class Cat(Animal):
def run(self):
print(r'run 什么 run') cat = Cat('cat')
cat.run() #run 什么 run

type(),isinstance(),dir(),getattr(),setattr(),hasattr()

1.type()函数可以判断对象类型,包括基本类型

type(123)		#<class "int">

2.isinstance() 函数判断类型是否为输入第二参数的类型,并返回布尔值

isinstance('a',str)			#true

3.dir() 函数返回一个包含字符串的 list ,list 中包含被测对象的所有属性

4.getattr() 和 setattr() 可以直接操作一个对象的状态

getattr(obj,'x')		#获取 obj 的 'x' 属性,如果不存在会报错
getattr(obj,'x','default') #可以通过添加额外一个参数来解决报错,如果不存在,返回 'default'
setattr(obj,'y',90) #设置 obj 的 'y' 属性为 90

5.hasattr() 函数检测对象是否存在某方法,返回布尔值

slots

通过定义 slots 变量,我们可以限制 class 实例能够添加的属性

class Student(object):
__slots__ = ('name') Xf = Student()
Xf.score = 99 #会报错

@property

在绑定属性的时候,为了安全,我们会定义一些私有属性。比如我们需要检查更改数值是否正确的时候。我们可以使用 @property 来实现

#@property
class Student(object):
def __init__(self,score = 60):
self._score = score @property
def score(self):
return self._score #使用@property会生成另外一个监视器@***.setter 。用以实现重新赋值操作
@score.setter
def score(self,val):
if not isinstance(val,int):
raise ValueError('score must be an integer')
if val < 0 or val > 100:
raise ValueError('score must between 0-100') self._score = val a = Student(90)
print(a.score)
#a.score = 9999 #报错

多重继承

一个子类可以继承多个父类,继承之间存在顺序

class Student(object):
pass class Child(object):
pass class Boy(Child,Student):
pass # Boy 继承 Child 和 Student 的属性和方法,有同名时顺序为 Boy-Child-Student

Python 第七天的更多相关文章

  1. 简学Python第七章__class面向对象高级用法与反射

    Python第七章__class面向对象高级用法与反射 欢迎加入Linux_Python学习群  群号:478616847 目录: Python中关于oop的常用术语 类的特殊方法 元类 反射 一.P ...

  2. 初学Python(七)——控制语句

    初学Python(七)——控制语句 初学Python,主要整理一些学习到的知识点,这次是控制语句. if : #-*- coding:utf-8 -*- age=raw_input('input yo ...

  3. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  4. Python在七牛云平台的应用(三)简单的人脸识别

    前言 这是最后一篇介绍python在七牛云平台的应用了,因为-前两篇文章第一篇分享了怎么安装七牛的官方库以及怎么对自己的空间进行下载上传,删除等行动.而第二篇则分享了怎么利用七牛的API接口,由于七牛 ...

  5. Python在七牛云平台的应用(二)图片瘦身

    (一)七牛云平台的图片瘦身功能简介:(引用自官网) 针对jpeg.png格式图片 瘦身后分辨率不变,格式不变. 肉眼画质不变. 图片体积大幅减少,节省 CDN 流量 官网给的图片压缩率很高,官网给的「 ...

  6. Python实现七牛云视频播放

    这篇文章是使用Python的Web框架Django Rest Framework来提供视频相关的api接口,主要功能包括视频上传.视频转码.视频访问授权.删除视频文件.视频截图功能. 七牛云上的基本概 ...

  7. 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档

    孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...

  8. 孤荷凌寒自学python第七十八天开始写Python的第一个爬虫8

    孤荷凌寒自学python第七十八天开始写Python的第一个爬虫8 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天止基本完成了对docx模块针 ...

  9. 孤荷凌寒自学python第七十七天开始写Python的第一个爬虫7

    孤荷凌寒自学python第七十七天开始写Python的第一个爬虫7 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 今天的学习仍然是在纯粹对docx模 ...

  10. 孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6

    孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 不过由于对python-docx模 ...

随机推荐

  1. React 实践项目 (二)

    React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! React 实践项目 (一 ...

  2. Struts2的知识点小总结

    strust2是 struts1和webwork的结合  (本质相当于servlet) 核心:拦截器 interceptor  action ognl和valuestack 使用struts的准备工作 ...

  3. delphi选择打印机打印

    printer.getprinter(mdevice, mdriver, mport, mhdmode); printer.setprinter(pchar(g_PRNzt), mdriver, mp ...

  4. AsyncTask onPreExecute方法用于在执行后台任务前做一些UI操作

    1.实例化 TableListsTask task = new TableListsTask(ServerIP,"ALL", MenuActivity.this);   //第三参 ...

  5. JAVA中Socket的用法模拟服务端和客户端

    <看透springMvc源代码分析与实践>学习笔记 Socket分为ServerSocket和Socket两个大类 ServerSocket用于服务端,可以通过accept方法监听请求,监 ...

  6. Luogu 1111 修复公路(最小生成树)

    Luogu 1111 修复公路(最小生成树) Description A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 给出A地区的村庄数N,和公路数M,公路是双向的 ...

  7. firefox插件开发及源码下载

    在个别情况下,由于数据量巨大,造成显示性能的明显下降,此时使用c++开发firefox插件,可以提高用户使用体验. test.html: 在插件中,我们导出3个函数给js:AddStr, Pause, ...

  8. 51nod_1253:Kundu and Tree(组合数学)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1253 全为红边的情况下,ans=C(n,3).假设被黑边相连 ...

  9. (转).tar.gz文件和.rpm文件的区别

    场景:在Linux环境下安装软件时候总是会遇到安装软件格式的选择,以及安装. 1 软件的二进制分发 Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式, 其优点是安装使用容易,缺 ...

  10. (转)systemctl 命令完全指南

    场景:在使用chkconfig查看vsftpd是否看机启动时候看不到启动项,用systemctl 才看到自己想要的结果 1 总结 from:https://linux.cn/article-5926- ...