day 22 面向对象的基础
面向对象:
1、简述编写和执行类中的方法的流程
class Foo: #类的编写
def func():
print("我爱你")
obj = Foo() #类的调用和执行
obj.func()
2、面向对象的三大特征?
封装、继承、多态
封装:
归类:将相关的功能封装到一个类中、
打包:将数据封装到一个对象中
继承:
自己没有找老爸要
当有两个类或者多个类,其中都有共同的方法时,为了避免代码重复编写,把它放到父亲中
多态:
python原生支持多态,崇尚鸭子模型,由于python函数传参时无法指定类型
def func (arg): #arg可以时多种类型,只要其中有send方法即可。
arg.send()
3、什么是构造方法?
__init__
4、面向对象中为什么要有继承?
提高代码的复用性,调用原则:先找self所在的函数中,没有的话找父亲要,父亲没有再去找爷爷
5、python多继承的原则?
先从左到右
6、面向对象方式的格式?
定义:
class 类名: - 定义了一个类
def 函数名(self): - 在类中编写了一个"方法"
pass
调用:
x1 = 类名() - 创建了一个对象/实例化一个对象
x1.函数名() - 通过对象调用其中一个方法.
7、构造方法
class Foo:
def __init__(self,name): #构造方法,目的进行数据初始化.
self.name = name
self.age = 18
obj = Foo('侯明魏') #通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可.
应用:1,将数据封装到对象中,以供自己再方法中调用
2,将数据封装到对象中,以供其它函数调用
8、面向对象代码如何编写?
方式一、归类+提取公共值
方式二、正向编写。在指定类中编写和当前类相关的所有代码 + 提取公共值
9、self到底是谁?
self参数时python帮助我们自动传参
如果执行面向对象中的方法时,前面必须有一个对象:xxx.func()
s15day22 面向对象 接下来内容:
第一部分:面向对象
第二部分:网络编程
第三部分:并发编程 内容回顾:
1. 面向过程 2. 函数式编程 def func(arg):
pass func(1)
func(2) 3. 为什么要将某些函数写在指定文件中?
对函数进行归类 今日内容:
1. 函数式编程和面向对象的对比 2. 面向对象代码如何编写 3. 面向对象三大特性:封装/继承/多态 内容详细:
1. 函数式编程和面向对象的对比 a. round 1 请开发一个消息提醒的功能(邮件/短信/微信) 函数:
def email(em,text):
"""
发送邮件
:return:
"""
print(em,text) def msg(tel,text):
"""
发送短信
:return:
"""
print(tel,text) def wechat(num,text):
"""
发送微信
:return:
"""
print(num,text) # 编写功能:假设用户购买课程,然后给alex发送提醒;
if 1==1:
msg('','张进购买了一个学位课')
email('alex@sb.com','张进购买了一个学位课')
wechat('xxxx','张进购买了一个学位课') 面向对象:
class Message:
def email(self, em, text):
"""
发送邮件
:return:
"""
print(em,text) def msg(self, tel, text):
"""
发送短信
:return:
"""
print(tel,text) def wechat(self, num, text):
"""
发送微信
:return:
"""
print(num,text) # 编写功能:假设用户购买课程,然后给alex发送提醒;
if 1==1:
obj = Message()
obj.email('alex@sb.com', '张进购买了一个学位课')
obj.msg('','张进购买了一个学位课')
obj.wechat('xxxx','张进购买了一个学位课') 对比:
函数:定义简单/调用简单
面向对象:定义复杂/调用复杂 好处:归类,将某些类似的函数写在一起 总结:
1. 函数式编程可能会比面向对象好.
2. Python中支持两种编程方式.
3. 面向对象方式格式:
定义:
class 类名: - 定义了一个类 def 函数名(self): - 在类中编写了一个"方法"
pass
调用:
x1 = 类名() - 创建了一个对象/实例化一个对象
x1.函数名() - 通过对象调用其中一个方法. 4. 示例:
class Account:
def login(self):
user = input('请输入用户名:')
pwd = input('请输入密码:')
if user == 'alex' and pwd == 'sb':
print('登录成功')
else:
print('登录失败') obj = Account()
obj.login() b. round 2 打印
"""
完成以下功能:
老狗/20岁/男/上山去砍柴
老狗/20岁/男/开车去东北
老狗/20岁/男/喜欢大宝剑
""" # ##################### 函数版本 #########################
"""
def kc(name,age,gender):
data = "%s,性别%s,今年%s岁,喜欢上山砍柴" %(name,gender,age)
print(data) def db(name,age,gender):
data = "%s,性别%s,今年%s岁,喜欢开车去东北" %(name,gender,age)
print(data) def bj(name,age,gender):
data = "%s,性别%s,今年%s岁,喜欢大宝剑" %(name,gender,age)
print(data) kc('老狗',20,'男')
kc('老狗',20,'男')
db('老狗',20,'男')
bj('老狗',20,'男')
"""
# ##################### 面向对象 #########################
class LaoGou: def __init__(self,name,age,gender): # 特殊的方法,如果 类名() ,则该方法会被自动执行 (构造方法)
self.n1 = name
self.n2 = age
self.n3 = gender def kc(self):
data = "%s,性别%s,今年%s岁,喜欢上山砍柴" %(self.n1,self.n3,self.n2)
print(data) def db(self):
data = "%s,性别%s,今年%s岁,喜欢开车去东北" %(self.n1,self.n3,self.n2)
print(data) def bj(self):
data = "%s,性别%s,今年%s岁,喜欢大宝剑" %(self.n1,self.n3,self.n2)
print(data) obj = LaoGou('老狗',20,'男')
obj.kc()
obj.db()
obj.bj() 总结:
1. 构造方法
示例一:
class Foo: def __init__(self,name): 构造方法,目的进行数据初始化.
self.name = name
self.age = 18 obj = Foo('侯明魏') 通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可. 示例二:
class Bar:
pass
obj = Bar() 2. 应用
a. 将数据封装到对象中,以供自己在方法中调用
class FileHandler:
def __init__(self,file_path):
self.file_path = file_path
self.f = open(self.file_path, 'rb') def read_first(self):
# self.f.read()
# ...
pass def read_last(self):
# self.f.read()
# ...
pass def read_second(self):
# self.f...
# ...
pass obj = FileHandler('C:/xx/xx.log')
obj.read_first()
obj.read_last()
obj.read_second()
obj.f.close() b. 将数据封装到对象中,以供其他函数调用
def new_func(arg):
arg.k1
arg.k2
arg.k6 class Foo:
def __init__(self,k1,k2,k6):
self.k1 = k1
self.k2 = k2
self.k6 = k6 obj = Foo(111,22,333)
new_func(obj) 练习: 信息管理系统
1. 用户登录
2. 显示当前用户信息
3. 查看当前用户所有的账单
4. 购买姑娘形状的抱枕 示例:
class UserInfo: def __init__(self):
self.name = None def info(self):
print('当前用户名称:%s' %(self.name,)) def account(self):
print('当前用户%s的账单是:....' %(self.name,)) def shopping(self):
print('%s购买了一个人形抱枕' %(self.name,)) def login(self):
user = input('请输入用户名:')
pwd = input('请输入密码:')
if pwd == 'sb':
self.name = user
while True:
print("""
1. 查看用户信息
2. 查看用户账单
3. 购买抱枕
""")
num = int(input('请输入选择的序号:'))
if num == 1:
self.info()
elif num ==2:
self.account()
elif num == 3:
self.shopping()
else:
print('序号不存在,请重新输入')
else:
print('登录失败') obj = UserInfo()
obj.login() 总结:
class Foo:
def func2(self):
print('func2') def func1(self):
self.fun2()
print('func1') obj = Foo()
obj.func1() 2. 面向对象代码如何编写
a. 规则 class Foo: def __init__(self,name):
self.name = name def detail(self,msg):
print(self.name,msg) obj = Foo()
obj.detail() b. 什么时候写?如何写? 方式一:归类+提取公共值
归类:
class File:
def file_read(self,file_path):
pass def file_update(self,file_path):
pass def file_delete(self,file_path):
pass def file_add(self,file_path):
pass class Excel:
def excel_read(self,file_path):
pass def excel_update(self,file_path):
pass def excel_delete(self,file_path):
pass def excel_add(self,file_path):
pass 提取公共值:
class File:
def __init__(self,file_path):
self.file_path = file_path def file_read(self):
pass def file_update(self):
pass def file_delete(self):
pass def file_add(self):
pass class Excel:
def __init__(self,file_path):
self.file_path = file_path def excel_read(self):
pass def excel_update(self):
pass def excel_delete(self):
pass def excel_add(self):
pass 方式二:在指定类中编写和当前类相关的所有代码 + 提取公共值 class Message:
def email(self):
pass class Person:
def __init__(self,na, gen, age, fig)
self.name = na
self.gender = gen
self.age = age
self.fight =fig def grassland(self):
self.fight = self.fight - 10 def practice(self):
self.fight = self.fight + 90 def incest(self):
self.fight = self.fight - 666 cang = Person('苍井井', '女', 18, 1000) # 创建苍井井角色
dong = Person('东尼木木', '男', 20, 1800) # 创建东尼木木角色
bo = Person('波多多', '女', 19, 2500) # 创建波多多角色 dong.grassland() 3. 面向对象的三大特性:封装/继承/多态 封装:
将相关功能封装到一个类中:
class Message:
def email(self):pass
def msg(self):pass
def wechat(self):pass
将数据封装到一个对象中: class Person:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender obj = Person('孙福来',18,'女')
继承:
class SuperBase:
def f3(self):
print('f3') class Base(SuperBase): # 父类,基类
def f2(self):
print('f2') class Foo(Base): # 子类,派生类 def f1(self):
print('f1') obj = Foo()
obj.f1()
obj.f2()
obj.f3()
# 原则:现在自己类中找,么有就去父类 总结:
1. 继承编写 class Foo(父类):
pass 2. 支持多继承(先找左/再找右) 3. 为什么要有多继承? 提供代码重用性 练习: 找self到底是谁的对象?从谁开始找. 多态:
多种形态或多种状态
鸭子模型,只要可以嘎嘎叫就是鸭子. Python
# 由于python原生支持多态,所以没有特殊性.
"""
class Foo1:
def f1(self):
pass class Foo2:
def f1(self):
pass class Foo3:
def f1(self):
pass def func(arg):
arg.f1() obj = Foo1() # obj= Foo2() obj = Foo3()
func(obj)
""" java
class Son(list):
pass class Son1(list):
pass # 以后传参时,arg可以是:list类的对象/list任何子类的对象
public void func(list arg){
print(arg)
} # obj = list()
# obj = Son()
obj = Son1()
func(obj) 重点:
1. 编写方式执行流程 2. 如何归类?
反向:归类+提取公共值
正向:类相关的功能+提取公共值 3. 三大特性 作业:练习题
day 22 面向对象的基础的更多相关文章
- [.net 面向对象编程基础] (22) 事件
[.net 面向对象编程基础] (22) 事件 事件(Event)是学习.net面向对象编程很重要的一部分,在学习事件之前,我们实际上已经在很多地方使用了事件,比如控件的click事件等,这些都是. ...
- [.net 面向对象编程基础] (1) 开篇
[.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...
- [.net 面向对象编程基础] (17) 数组与集合
[.net 面向对象编程基础] (17) 数组与集合 学习了前面的C#三大特性,及接口,抽象类这些相对抽象的东西以后,是不是有点很累的感觉.具体的东西总是容易理解,因此我们在介绍前面抽象概念的时候,总 ...
- [.net 面向对象编程基础] (20) LINQ使用
[.net 面向对象编程基础] (20) LINQ使用 通过上节LINQ的基础知识的学习,我们可以开始使用LINQ来进行内存数据的查询了,我们上节说了LINQ的定义为:Language Integr ...
- [.net 面向对象编程基础] (23) 结束语
[.net 面向对象编程基础] (23) 结束语 这个系列的文章终于写完了,用了半个多月的时间,没有令我的粉丝们失望.我的感觉就是一个字累,两个字好累,三个字非常累.小伙伴们看我每篇博客的时间就知道 ...
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- [.net 面向对象编程基础] (2) 关于面向对象编程
[.net 面向对象编程基础] (2) 关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...
- [.net 面向对象编程基础] (3) 基础中的基础——数据类型
[.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...
随机推荐
- 利用X-Forwarded-For伪造客户端IP漏洞成因及防范
内容转载自叉叉哥https://blog.csdn.net/xiao__gui/article/details/83054462 问题背景 在Web应用开发中,经常会需要获取客户端IP地址.一个典型的 ...
- 设计模式(七)Builder模式
Builder模式,从这个名字我们可以看出来,这种设计模式就是用于组装具有复杂结构的实例的. 下面还是以一个实例程序来解释这种设计模式,先看实例程序的类图. 这里为了调试方便,只实现其中一个功能Tex ...
- quartus使用串口IP模块
在quartus平台中使用串口模块的IP,需要使用到platform designer软件来实现. 1.在quartus界面调出IP Catalog界面. 2.在IP catalog中搜索UART,找 ...
- python中基本运算符
基本运算符 a // b 取整 a % b 取余 a ** b a 的b次方 a == b 判断运算符左右两边值是否相等 a != b 判断运算符左右两边值是否不等 a > b a >= ...
- Educational Codeforces Round 71 (Rated for Div. 2)E. XOR Guessing
一道容斥题 如果直接做就是找到所有出现过递减的不同排列,当时硬钢到自闭,然后在凯妹毁人不倦的教导下想到可以容斥做,就是:所有的排列设为a,只考虑第一个非递减设为b,第二个非递减设为c+两个都非递减的情 ...
- 通过Value获取Map中的键值Key的四种方法
1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value ...
- C语言I—2019秋作业01
1您对软件工程专业或计算机科学与技术专业了解是什么? 工程专业将成为一个新的热门专业.软件工程专业以计算机科学与技术学科为基础,突出软件开发的工程性,使学生在掌握计算机科学与技术方面知识和技能的基础上 ...
- 学习笔记03http协议
1.浏览器就是一个sokect客户端,使用http协议与服务器进行交流.http请求:请求头:(请求方法)sp(url)sp http/1.x <cr><lf>(通用头类型名) ...
- [考试反思]0929csp-s模拟测试55:消逝
菜得过分. 面对T1的大板子不知所措,然后T2的贪心不小心把排序语句删了... T1这种大模板啊...其实我是觉得我能打出来的,然后先用一个小时码了一个2k. 然后做T2想贪心就出来了.十分钟码完T3 ...
- NOIP模拟13
上来看了一遍题,发现T2似乎不可做...暴力只给20分怎么玩? T1感觉是要离线处理,但是看了一会发现不会,遂决定先打暴力.然后去把T2 20分拿了,回去看T1,手摸了一下样例,成功推出式子,5分钟码 ...