给小白整理的第三篇Python知识点

课程推荐:Python开发工程师--学习猿地--送9个上线商业项目

7、面向对象编程
万物皆是对象,Python当然支持面向对象编程。类和对象是面向对象编程的两个主要方面,类创建一个新的对象,对象是这个类的实例。

对象可以使用类的变量,属于对象或类的变量被称为域;对象也可以使用属于类的函数,这样的函数称为类的方法;域和方法可以合称为类的属性。

域有两种类型

属于实例的
属于类本身
它们分别被称为实例变量和类变量。

类使用关键字class创建,类的域和方法被列在一个缩进块中。

类的方法必须有一个额外的第一个参数,但是在调用时不为这个参数赋值,这个特殊变量指对象本身,按照惯例它的名称是self,类似Java中的this。

在类中下面两个特都方法需要注意:

init方法:在类的一个对象被创建时调用该方法;相当于c++中的构造函数,就是当这个类调用了,那么这个init 方法就要执行。

del方法:在类的对象被销毁时调用该方法;相当于c++中的析构函数。在使用del删除一个对象时也就调用del方法,del是最后调用的。

Python中所有的类成员(包括数据成员)都是public的,没有Java的私有类,也就是人人都有调用类,虽然编写变成很简单, 但是资源人人都可以随意分配访问,在项目中确实一个不好的东西。

但是Python 类的却有私有变量和私有方法之说,这个是一个例外,如果使用的数据成员以双下划线为前缀,则为私有变量。

你实例化这个类,访问不了。这是很多人忽略 的

比如:

1

2

3

4

5

6

7

8

9

10

11

12

class public():

_name = 'protected类型的变量'

__info = '私有类型的变量'

def _f(self):

    print("这是一个protected类型的方法")    def __f2(self):

    print('这是一个私有类型的方法')    def get(self):

    return(self.__info)

pub = public()# 先打印可以访问的print(pub._name)

pub._f()####结果如下####protected类型的变量

这是一个protected类型的方法# 打印下类 私有变量和私有方法print(pub.__info)

报错:'public' object has no attribute '__info'pub._f2()

报错:pub._f2()复制代码

但是私有属性和方法可以在同一个类中被调用

1

pub.get()#######'私有类型的变量'复制代码

上面是很多人不知道的,下面,我来声明一个Person类

1

2

3

4

5

6

7

8

9

10

11

class Person():

Count = 0

def __init__(self, name, age):

    Person.Count += 1

    self.name = name

    self.__age = age

p = Person("Runsen", 20)

print(p.Count)# 1 说明我实例化,这个init方法就要执行print(p.name) #Runsenprint (p.__age)

#AttributeError: Person instance has no attribute '__age'#私有变量访问不了,报错复制代码

8、继承
面向对象编程 (OOP),英语全称:Object Oriented Programming,面向对象编程的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

继承,其实这样理解,就是我写了一个爸爸类和儿子类,爸爸有钱,儿子却没钱,于是儿子决定继承爸爸,调用爸爸的钱(爸爸类的变量和方法)。

继承一个类,基本使用下面的五个方法。

8.1 直接调用父类属性方法;
爸爸有钱,儿子却没钱,于是儿子用爸爸的钱

1

2

3

4

5

6

7

8

9

class Father():

def __init__(self):

    self.money= 1000

def action(self):

    print('调用父类的方法')

class Son(Father):

pass

son=Son() # 子类Son 继承父类Father的所有属性和方法son.action() # 调用父类属性输出:调用父类的方法

son.money # 调用父类属性输出:1000复制代码

8,2 强制调用父类私有属性方法;
爸爸说,你这个儿子,老是用我的钱,我决定藏私房钱。儿子试试super()拿你的私房钱,但是这里需要注意super()强制调用父类私有属性方法,就是重写方法,私有变量是不能用supper继承不了,还不可以访问父类中的私有属性方法的变量,就是儿子是拿不了私房钱的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

class Father():

__money  = 1000 #私有变量是继承不了



def __action(self):  # 父类的私有方法

    money = 1000

    print('调用父类的方法')

class Son(Father):

def action(self):

    super()._Father__action()

    print(money)

son=Son()

son.action()

调用父类的方法

name 'money' is not defined复制代码

8.3 重写父类属性方法;
突然间儿子竟然有钱,决定不用爸爸的钱,用自己的钱,决定重写父类属性方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class Father():

def __init__(self):

    self.money = 0



def action(self):

    print('调用父类的方法')

class Son(Father):

def __init__(self):

    self.money = 1000



def action(self):

    print('子类重写父类的方法')

son=Son() # 子类Son继承父类Father的所有属性和方法son.action() # 子类Son调用自身的action方法而不是父类的action方法son.money # 自己的1000复制代码

8.4 调用父类的init方法
如果爸爸把钱放在init,儿子有没有可能拿到爸爸的钱,都不是私有变量,就不是私房钱,当然可以拿到

我们先看看如果不用super,能不能拿到。

1

2

3

4

5

6

7

8

class Father():

def __init__(self):

    self.money = 1000

class Son(Father):

def __init__(self):

    pass

son=Son()

print(son.money)# 报错:'Son' object has no attribute 'money'复制代码

连super不用就像拿钱,太小看你爸爸我了。

1

2

3

4

5

6

7

8

9

10

11

class Father():

def __init__(self):

    self.money = 1000

class Son(Father):

def __init__(self):

    super().__init__()        #也可以用 Father.__init__(self)  这里面的self一定要加上(上面两个相同)



    son=Son()

print(son.money)

1000复制代码

8.5 继承父类初始化过程中的参数
有的时候,爸爸需要挣钱和花钱,就是我们初始化过程中的参数,儿子很好奇,决定看看爸爸口袋还要多少钱。

我们这里先写死了earn_money和spend_money

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class Father():

def __init__(self):

    self.earn_money=1000

    self.spend_money= -500

class Son(Father):

def __init__(self):

    super().__init__()        #也可以用 Father.__init__(self)  这里面的self一定要加上



def add(self):

    return self.earn_money+self.spend_money

son=Son()

print(son.add())500复制代码

儿子发现爸爸钱不够,于是偷偷的拿了点钱过来。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

class Father():

def __init__(self,a,b):

    self.earn_money = a

    self.spend_money= b    def add(self):

    return self.a + self.b

#调用父类初始化参数a,b并增加额外参数cclass Son(Father):

def __init__(self,a,b,c=1000):  # c固定值

    Father.__init__(self,a,b) 

    self.son_money = c       

def add(self):

    return self.earn_money+self.spend_money + self.son_money

son=Son(1000,-500) # 所以c可以不用显示表达出来print(son.add()) # 调用子类add函数1500复制代码

以上基本涵盖了Python类的继承,调用父类的属性和方法基础内容,可以自己动手写些案例,加深理解。

9、输入/输出
程序与用户的交互需要使用输入/输出,主要包括控制台和文件;对于控制台可以使用input和print。input(xxx)输入xxx, 然后读取用户的输入并返回。

1

In [1]: input()1Out[1]: '1'复制代码

10、文件输入/输出
可以使用file类打开一个文件,使用file的read、readline和write来恰当的读写文件。对文件读写能力取决于打开文件时使用的模式, 常用模式

读模式("r")
写模式("w")
追加模式("a")
文件操作之后需要调用close方法来关闭文件。如果用with open就不用slose了。

还有r+,w+,a+

r:仅仅表示读入
r+:既可以读取还可以写入
w: 仅仅表示写入
w+:既可以读取还可以写入
但r+与w+不同的是,不会把原先存在txt中的东西清空,下面是他们的对比,反正尽量用a+,基本没什么错报出来。

描述 r+ w+ a+
当前文件不存在时文件 抛出异常 创建文件 创建文件
打开后原文件内容 保留 清空 保留
初始位置 0 0 文件尾
写入位置 标记位置 标记位置 写入时默认跳至文件尾
补充个例子吧:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

test = '''\

This is a program about file I/O.

Author: Runsen

Date: 2020/3/31

'''f = open("test.txt", "w")

f.write(test)

f.close()

f = open("test.txt") #默认rwhile True:

line = f.readline()    if len(line) == 0: 

    break

print(line)

f.close()######This is a program about file I/O.

Author: Runsen

Date: 2020/3/31复制代码

11、存储器
存储器,大家应该不知道。python提供一个标准的模块,成为pickle,使用它可以在一个文件中存储任何python对象,之后可以完整的取出来,这被称为持久地存储对象;还有另外一个模块成为cPickle,它的功能和pickle完全一样,只不过它是用c写的,要比pickle速度快(大约快1000倍)。

1

2

3

4

5

6

7

8

9

10

11

12

import pickle

datafile = "data.data"mylist = ["Runsen", "is", "20"]

f = open("test.txt", "wb+")

pickle.dump(mylist, f)

f.close()del mylist

f = open(datafile,'rb+')

mylist = pickle.load(f)

print(mylist)#["Runsen", "is", "20"]复制代码

12、异常
当程序中出现某些异常的状况时,异常就发生了。

python中可以使用try ... except 处理。

1

2

3

try: print (1/0)except ZeropisionError as e:

print(e)except:

print( "error or exception occurred.")#integer pision or modulo by zero复制代码

原文摘自:https://www.php.cn/python-tutorials-463720.html

Image placeholder
qwetiop
未设置
  0人点赞

没有讨论,发表一下自己的看法吧

推荐文章
云原生时代,分布式系统设计必备知识图谱(内含22个知识点)

作者|杨泽强(竹涧)阿里云技术专家我们身处于一个充斥着分布式系统解决方案的计算机时代,无论是支付宝、微信这样顶级流量产品、还是区块链、IOT等热门概念、抑或如火如荼的容器生态技术如Kubernetes

Python 教程-了解Python

什么是Python Python能干什么? 有什么特点? 什么是Python 官方介绍: Python是一个易于学习、功能强大的编程语言。它拥有高效高级的数据结构和一种简单有效的面向对象编程的

Python 教程-Python 安装

在Windows上安装 访问https://www.python.org/downloads/并下载最新版本。在撰写时当前最新是3.8。在安装的时候和其他软件一样,无脑式下一步。需要注意的是如果在W

Python入门教程_2. 使用 Python 解释器

2.1.调用解释器 Python解释器通常安装在目标机器上的/usr/local/bin/python3.7目录下;把/usr/local/bin目录放进你的Unixshell的搜索路径里,确保它可以

Python入门教程_3. Python 简介

在下面的例子中,输入和输出分别由大于号和句号提示符(>>>和...)标注:如果想重现这些例子,就要在解释器的提示符后,输入(提示符后面的)那些不包含提示符的代码行。需要注意的是在练习中遇到的从属提示符

Python入门教程_4. 深入 Python 流程控制

除了刚刚介绍的while语句,Python还有一些在其他语言中常见的控制流语句,并做了一些改动。 4.1.if语句 也许最著名的语句是if语句了。 例如: >>>x=int(input("Please

【python测试开发栈】帮你总结python random模块高频使用方法

随机数据在平时写python脚本时会经常被用到,比如随机生成0和1来控制逻辑、或者从列表中随机选择一个元素(其实抽奖程序也类似,就是从公司所有人中随机选择中奖用户)等等。这篇文章,就帮大家整理在pyt

流畅的Python读书笔记 --- 第一章 Python数据模型

近期开始读“流畅的Python”这本书,想把自己的读书笔记分享给大家,希望能帮到也对这本书感兴趣但是没时间看的各位。(文章中大部分的话和图片摘录总结自“流畅的Python”一书,以及python官方网

【python测试开发栈】帮你总结python time模块高频使用方法

在平时写python脚本时,时间是我们经常用到的数据,比如:时间戳、前端展示的对应格式的时间等,在python中主要有三个和时间处理相关的模块:time、datetime、calendar,这篇文章主

【Python 1-5】Python教程之——字符串

课程推荐:Python开发工程师--学习猿地--送9个上线商业项目 字符串字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:"Thisi

漫谈:Java和Python现在都挺火,我应该怎么选?Java和Python优缺点比较。

课程推荐:Java开发工程师--学习猿地精品课程课程推荐:Python开发工程师--学习猿地精品课程 声明:这是一篇容易引起撕逼的文章,为了祖国和谐,人民安康,请各位看官尽量理性讨论。同时,这篇文章是

60秒一口Python:147个demo,助你从新手小白步步进阶编程高手

人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐。不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文Python“糖果包”:147个代码小样,60秒一口,营养又好

可能是全网最好的MySQL重要知识点

什么是MySQL?MySQL是一种关系型数据库,在Java企业级开发中非常常用,因为MySQL是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了MySQL,因此它的稳定性是有保障的。MySQL

面试题总结:可能是全网最好的MySQL重要知识点

作者:Snailclimb 整理编辑:SegmentFault本文原载于SegmentFault专栏JavaGuide,如侵删。标题有点标题党的意思,但希望你在看了文章之后不会有这个想法——这篇文章是

Vuex的一些常用知识点介绍

一、为什么要使用Vuex1、多个组件依赖同一个状态,使用组件之间通信方法会非常繁琐,例如多层嵌套组件。2、需要全局保存的数据,例如用户、权限信息,全局系统设置二、Vuex的五个核心属性1、state:

css 常用知识点全在这里了。哪位大侠还能补充?

努力学习与总结是对自己能力的提升,也希望能帮助到同学们。BFC块状格式化上下文(blockformattingcontext)简称BFC:是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的

这 20 多个高并发编程必备的知识点,你都会吗?

转载自并发编程网–ifeve.comhttp://ifeve.com/%e9%ab%98%e5... 一、前言借用Java并发编程实践中的话”编写正确的程序并不容易,而编写正常的并发程序就更难了”,相

python自动化测试学习 - Pytest插件之selenium

推荐课程《Python开发工程师--学习猿地精品在线课》今天主要演示Pytest框架的selenium插件。webdriver是主流的UI自动化测试框架,在Pytest的测试框架中也提供了对webdr

2019 最新计算机技能排名出炉:Python 排第三,第一名是…

除了编程语言之外,要想找一份计算机相关的工作,还需要很多其他方面的技能。最近,来自美国求职公司Indeed的一份报告显示:在全美工作技能需求中,数据库语言SQL、编程语言Java分列前两位。虽然Pyt

黑客锁定市政系统勒索比特币,政府拒付赎金!全美最危险城市陷入瘫痪的第三周……

大数据文摘出品作者:李雷、狗小白、宋欣仪政府邮箱无法访问、所有水电费停车费无法缴纳、所有房产交易无法进行。在美国东部城市巴尔的摩市,这样的市政系统瘫痪已经持续了三周。5月初,黑客入侵并控制了美国马里兰

Python中的openpyxl如何对excel修改文件

推荐课程:Python开发工程师--学习猿地--送9个上线商业项目 Python安装openpyxl 首先我们应该配置pip详细配置教程地址:https://blog.csdn.net/hanhanw

使用Python批量重命名iPhone拍摄的照片-按照拍摄时间重命名

课程推荐:Python开发工程师--学习猿地--送9个上线商业项目 #!/usr/bin/envpython --coding:utf-8-- '''批量修改照片文件名称的Python脚本程序。遍历指

超8千Star,火遍Github的Python反直觉案例集!

大数据文摘授权转载作者:SatwikKansal译者:暮晨Python,是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性。但有的时候,Python的一些输出结果对于初学者来说似

面向回家编程!GitHub标星两万的”Python抢票教程”,我们先帮你跑了一遍

盼望着,盼望着,春节的脚步近了,然而,每年到这个时候,最难的,莫过于一张回家的火车票。据悉,今年春运期间,全国铁路发送旅客人次同比将增长8.0%。达到4.4亿人次,2020年铁路春运自1月10日开始,

GitHub上十大很火的Python项目,最后一个竟然是它!

课程推荐:Python开发工程师--学习猿地--送9个上线商业项目 作为程序开发人员,GitHub是大家平时必逛的网站,GitHub作为目前全球比较大的男性同性交友平台,上面存在着太多太多的宝藏程序。