面向对象初级

一、面向对象介绍

思考一:在之前学习的基础上,已经能够处理实现很多功能,比如我们可以定义一个关于人相关的内容,但是如果要表示很多人该怎么办呢?
  • 加粗样式面向对象介绍
name = '不动' # 定义姓名
age = 18
name1 = '如山'
age1 = 18
def play1(name):print('%s 正在玩游戏---' % name)
def search1(name):print('%s 正在查资料---' % name)


描述一个人的信息和行为很容易,但是代码肯定是要处理很多人的,这个时候该怎么办?
如果使用相同的变量名,则肯定会冲突,但是如果使用不同的变量名,则会变得非常麻烦,同时别人如何知道关于人已经定义哪些东西了呢?
借鉴函数的封装思想,再次对函数和变量进行封装,来提高代码的复用性

class Person:name = '不动'age = 18def play(name):print('%s 正在玩游戏---' % name)def search(nmae):print('%s 正在查资料---' % name)


通过这样的封装,把和人相关的变量函数等放在了一起,只要找到这个部分代码,就能知道关于人已经定义了哪些变量和函数
为了便于区分,把用关键字class定义的代码块称为
在类里面的变量称为类的属性
在类里面的函数称为类的方法

  • 面向对象介绍-名词解释
    :一类的意思,人是一个类,狗也是一个类,车也是一个类,因为他们有很多种。可以说成是一个人(人能做的事情很多)、狗(也可以干很多事情)、车(也很多)
    属性:人有人的属性,狗有狗的属性,车也有车的。比如人(名字、年龄、性别),狗(颜色、品种、性别)
    方法:方法(解决某个问题采用的方式方法)就好比动作,人可以干嘛,狗可以干嘛,车可以干嘛。比如车(漂移、加速),人(写作业、吃饭、睡觉)

  • 面向对象的作用
    面向过程(比如吃面条)
    买面条 洗锅 烧水 煮面条 吃面
    面向对象
    进商店 点菜 吃面条
    从上面可以看到面向过程对面系那个对象要长,要复杂

  • 面向过程和面向对象对比
    面向过程
    变量和函数。“散落”在文件的各个位置,甚至是不同文件中。
    看不出变量和函数的相关性,非常不利于维护,设计模式不清晰
    经常导致程序员,忘记某个变量的相关性,而导致无法检测的错误
    面向对象
    相关的变量和函数都“封装”在对象里,以对象为单位来管理代码。
    变量与函数的相关性清晰,利于维护,设计模式清晰。
    程序员可以配合“继承”来提高代码的可重用行,加强合作开发。

  • 面向对象的总结
    面向对象
    用面向对象的思维去解决问题。
    将某一类事物相关的属性和方法封装在一起,用来表示这类事物

    二、类定义和使用

     思考一:刚才看到了类带来的方便之外,但是刚才类好像也只能表示一个人,如果要表示多个人该怎么办呢?思考二:需要满足两点:第一能表示不同的人,且相互不影响;第二:方法调用更加简单点,使用过程中不需要太复杂
    
  • 类的定义

class Person:def __init__(self,name,age,sex='男'):self.name = nameself.age =ageself.sex = sexdef play(self):print('%s 正在玩游戏---' % self.name)def search(self):print('%s 正在找资料---' % self.name)


bd称为Person类的实例,这里语境的意思是具体的某个人
self是实例自己
__init__是初始化函数,在实例化时会自动的调用
实例通过点**(.)**操作符来调用属性或方法

  • 类的实例化
xiaoyu = Person('小宇',18)
moran.__init__('小宇',18)
Person.__init__(xiaoyu,'小宇',18)

分析一波,上述是层层递进的,我们先实例化一个类,然后类里面是怎么走的,定义完以后,他会根据他的初始化进行初始,把”‘小宇’“赋值给”self.name“,”18“赋值给”self.age“,然后那个self就是实例本身。
self的值由Python自动传入,self也就是实例本身

  • 类的析构函数
class Person:def __init__(self,name,age,sex='男'):self.name = nameself.age =ageself.sex = sexdef play(self):print('%s 正在玩游戏---' % self.name)def search(self):print('%s 正在找资料---' % self.name)def __del__(self):print('%s 事情做完了---' % self.name)


在类中增加__del__函数,当删除实例的时候,就会调用此方法
del关键字用来删除对象

  • 总结
    1、实例化
    掌握:类的实例化方法
    2、self
    理解:self代表的意思
    3、init
    掌握:初始化函数的使用
    4、del
    掌握:析构函数的用法
    三、继承和重用

     思考一:人有人多区别,比如广东人爱喝茶,四川人爱麻将,都是play方法,但是怎样表示不同结果呢?思考二:如果分别定义广东人和四川人的类,那么多代码是重复的,有没有解决办法呢?
    
  • 继承

class Person:def __init__(self,name,age,sex='男'):self.name = nameself.age =ageself.sex = sexdef play(self):print('%s 正在玩游戏---' % self.name)def search(self):print('%s 正在找资料---' % self.name)def __del__(self):print('%s 事情做完了---' % self.name)
class GuangDong(Person):def play(self):print('广东人爱喝茶')
class SiChuan(Person):def play(self):print('四川人爱打雀雀儿')


通过继承可以很好的提高代码的复用性
通过在类后面的跟上要继承的来确定父类

  • 继承的名词解释
    GuangDongSiChuan称为是Person子类,也可以成为派生类
    Person称为是GuangDongSiChuan父类,也是object子类
    object成为是所有类的父类

  • 重用

class GuangDong(Person):def play(self):print('广东人爱喝茶')Person.play(self) # 方法一super().play() # 方法二 推荐使用此方法


重用
子类重新定义父类的方法,让同意方法有不同的行为
如果子类想继续使用父类的行为,推荐使用super函数来实现

  • 总结
    1、继承
    掌握:类继承方法和作用
    2、objiect
    了解:所有的类都是继承object
    3、重用
    掌握:子类重新定义父类方法
    4、super
    掌握:super方法的使用
    四、多继承

     思考一:现在一个广东人和四川人生了一个孩子,这个时候,该怎么表示这种关系呢?
    
  • 多继承

class HunXue(GuangDong,SiChuan):def play(self):print('%s 即爱喝茶,又喜欢打麻将' % self.name)super().play()


多继承时,只需要在继承时增加需要继承的类即可
虽然有继承SiChuan类,但是并没有调用SiChuan类的play方法,但为什么打印了它的方法

  • 多继承的继承顺序

    通过调用__base__和__bases__可以查看到,类继承的第一个和所有类
    通过mro方法可以看到类的mro查找顺序
    Python对于所有磊会自动生成mro查找顺序,此顺序决定了向上查找方法的过程
    五、本节课总结
    1、面向对象
    理解:面向对象编程的优势
    2、类的定义和使用
    掌握:类的定义和类的实例化
    理解:self的作用
    掌握:初始化函数和析构函数的应用
    3、继承
    掌握:继承的用法和作用
    4、多继承
    掌握:mro的继承规则
    六、上节课作业

     参考代码如下
    

1、利用datetime模块,批量生成6月份每天的txt文件

2、生成上面的文件之后,再一次在每个文件中写入文件名

3、将上面生成的所有文件名之后加上‘_NEW’

from datetime import *
import os
def zuoye():begin_date = date(2020,6,1)end_date = date(2020,6,30)while begin_date <= end_date:file_date = begin_date.strftime('%Y-%m-%d')with open('{}.txt'.format(file_date),'w+',encoding='utf-8') as f:f.write(file_date)begin_date += timedelta(days=1)for i in range(1,31):if i < 10:os.rename('2020-06-0{}.txt'.format(i),'2020-06-0{}_NEW.txt'.format(i))elif i >= 10:os.rename('2020-06-{}.txt'.format(i),'2020-06-{}_NEW.txt'.format(i))


4、假设有一个英文文本文件,编写一个程序读取其内容,并将里面的大写字母
变成小写字母,小写字母变成大写字母(字符串swapcase方法)

with open('html.txt','r+') as f:str_1 = f.read()str_2 = str_1.swapcase()f.seek(0)f.write(str_2)


七、作业
1、定义一个账户类,可以创建账户、存款、取款 、查询余额、以及销户等操作
2、现在三个人分别去开户,存款 和 销户,请利用上面的类实现出来
提示:账户必备要素:1、账户名 2、密码 3、余额

参考代码下期见

Python全栈最全学习之路-Python基础(七)相关推荐

  1. 一个初学者→全栈工程师的学习之路(1)——关于全栈工程师的理解

    关于全栈工程师的理解与学习 一.关于全栈工程师的定义与职务 1. 全栈工程师的定义 随着互联网技术的蓬勃发展,技术变得越来越繁琐,越来越多面化.一个项目的开发,需要使用多样技术.举个例子,一个网站的建 ...

  2. mybatis mapper.xml dtd_全栈开发踩坑之路4-用MyBatis实现服务

    1.前言 上一篇文章介绍了如何设计后端的Mysql数据库:Alex Wang:全栈开发踩坑之路3-MySql数据库设计,本文介绍如何用MyBatis实现后端服务. 本后端项目的Github地址(撰写中 ...

  3. 前端全栈工程师需要学习的知识

    前端全栈工程师学习的知识主要有以下几个方面,我今天分享一些干货 渐进式框架Vue.Angular.React 这些单页框架让前端得到了极大的发展,前端现在自己管理路由跳转,同时承担起了更重要的一些功能 ...

  4. 从全栈到全维,青云QingCloud的思与行

    不吹不捧,对于云计算发展趋势的思考,青云QingCloud一直走在业界的最前沿. 不得不服,将前瞻技术转化为现实落地的产品,青云QingCloud也为业界做出了典范. 成立七年的青云QingCloud ...

  5. 软件测试的学习之路-----计算机基础 (详情展示)

    文章目录 一:计算机基本介绍 二:硬件系统 三:软件系统 四:二进制的基本介绍 五:常见的数字进制 六:进制之间的转换 七:编码 八:数据的计量单位 九:编程语言 十:基本的DOS命令 十一:欢迎查看 ...

  6. Vue学习之路(基础篇)

    Vue学习之路(基础篇)

  7. 2017最新整理python全栈工程师系统培训之路精品课程(全套)

    百度搜索"一起自学吧"做大数据专家,不做第一,只做唯一. 课程介绍: 本课程由一起自学吧论坛打造,目的是给想成为Python全栈工程师的同学提供一套完整,全面而系统的培训课程,课程 ...

  8. 【Python全栈100天学习笔记】Day41 Django快速上手

    快速上手 Web开发的早期阶段,开发者需要手动编写每个页面,例如一个新闻门户网站,每天都要修改它的HTML页面,随着网站规模和体量的增大,这种方式就变得极度糟糕.为了解决这个问题,开发人员想到了用外部 ...

  9. .NET全栈开发工程师学习路径

    PS:最近一直反复地看博客园以前发布的一条.NET全栈开发工程师的招聘启事,觉得这是我看过最有创意也最朴实的一个招聘启事,更为重要的是它更像是一个技术提纲,能够指引我们的学习和提升,现在转载过来与各位 ...

  10. angular 模块构建_通过构建全栈应用程序学习Angular 6

    angular 模块构建 Angular 6 is out! The new features include better performance, new powerful CLI additio ...

最新文章

  1. 基于SSM实现图书管理系统
  2. IIS6+Tomcat7整合
  3. 计算机网络实验报告哈工大_哈工大计算机网络实验报告.doc
  4. C语言再学习 -- 再论数组和指针
  5. Persistent Memory编程简介
  6. 今天的几经沧桑的飞鸽传书2011
  7. 如何添加评论_亚马逊评论数据分析
  8. 细数那些不能直视的IE6BUG
  9. python学习之生成器
  10. FPGA入门的必经之路(一)
  11. 戴尔电脑硬件自检教程
  12. visio添加连接点
  13. Android安全之使用root权限绕过检测机制,强行自动允许应用的悬浮窗/应用后台弹出界面等权限
  14. netty 给指定用户推送消息_Netty实战:设计一个IM框架就这么简单!
  15. LeetCode: 872. Leaf-Similar Trees
  16. 独立产品灵感周刊 DecoHack #012
  17. java处理excel,将xlsx转xls
  18. Codeforces - Serge and Dining Room
  19. iOS UIFont 字体名字大全
  20. 2009奥巴马的秋季开学演讲稿

热门文章

  1. 关于计算机组装与维护的论文,《计算机组装与维护》论文,关于《计算机组装维护》教学相关参考文献资料-免费论文范文...
  2. Instrumentation类方法简单介绍
  3. sqlalchemy批量删除数据、全量删除
  4. PBAC基于策略的权限控制
  5. GBase 8c 时间日期函数-TIMESTAMPDIFF
  6. HBase的权限控制
  7. Java7新特性一览
  8. 【外设】关于鼠标快捷按键的设置
  9. Shell编程——字符截取命令
  10. greenplum源码解析 全局死锁检测GDD-1