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. 为实施了IFD的Dynamics 365更换自签名的SSL证书以符合Chrome的要求

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复259或者20170704可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  2. js 数组里求最大值和最小值

    // 数组里相邻两个数做比较 取满足条件的那个(以此类推) var arr = [1,3,4,5,6,7]; function Max(array){ var max = array[0]; for( ...

  3. ASP.NET Core MVC 过滤器介绍

    过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...

  4. POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法

    POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心) Description Farmer John ...

  5. codeforces 129B students and shoes

    https://vjudge.net/problem/CodeForces-129B 题意: 有n个学生,他们之间被鞋带缠住了.现在,老师首先把所有只与一个学生直接相连的学生找出来,让他们聚集到一起, ...

  6. (转)MyBatis在插入的数据有空值时,可能为空的字段都要设置jdbcType

    1 引言 前面的所有语句中你所见到的都是简单参数的例子,实际上参数是 MyBatis 非常强大的元素,对于简单的做法, 90% 的情况参数都很少,比如: <select id="sel ...

  7. Phonegap环境配置

    最初选择的是使用Phonegap桌面开发工具 Phonegap Desktop-App与 手机客户端调试工具PhoneGap Developer App,这样省事多了,可惜不能使用后续phonegap ...

  8. HTML5 开发APP

    近期在做app,现在项目进行了一段时间,我打算把自己的经验写出来,给自己总结一下也给会用小伙伴看一下.本人前端一枚.我们所以能选的技术就是CSS,HTML,JS了,经过准备我决定用HBuilder 准 ...

  9. cloudstack下libvirtd服务无响应问题

    在cloudstack4.5.2版本下,偶尔出现libvirtd服务无响应的情况,导致virsh命令无法使用,同时伴随cloudstack master丢失该slave主机连接的情况.最初怀疑是lib ...

  10. FFT_ad采样速率

    调用quartus的ip核测量频率和幅值,可以把程序分成四大部分.第一部分是AD采样模块,本次实验用的是ad828,最高采样率为70M, 根据奈贵斯特采样定律 Fs > 2Fc,即采样率要大于信 ...