1.初识面向对象
面向过程:
一切以事物的发展流程为中心
面向对象:
一切以对象为中心.一切皆为对象.具体的某一个事务就是对象
打比方:
大象进冰箱
步骤:第一步:开门, 第二步:装大象,第三:关门
面向对象: 大象,进冰箱 , 此时主语是大象,我操纵的是大象,此时的大象就是对象
2.类,对象
类: 就是图纸. 创建对象的第一步.先画图纸.先写类.
对象: 通过类创建对象, 列如:对象就是车,通过图纸造出来的东西
类与对象的关系:
类是对xxx事务的归类.
写:
__init__(self,参数) 参数一般作为属性设置给对象.对象就是self,对徐行的封装.
def 方法(self,参数): 方法. 第一个参数一般是固定的self.当前类的对象.
pass
对象是xx类型的一个具体
创建对象: 类名()
创建类:
class 类名:
def __init__(self): ##初始化方法.又被称为构造方法
self.属性 = 值
self.属性 = 值
self.属性 = 值
def fangfa(self):
方法体(函数体, return)
创建对象:
变量 = 类型() ###实例化 <->创建对象
变量.属性 #访问对象的属性信息
变量.方法() ##访问类中的方法
1. 创建⼀个武松. 武松可以打老虎, 杀嫂⼦, 替天⾏道
类就是对属性和方法的封装
class Person:
# 属性
def __init__(self, waihao, name, address):
self.waihao = waihao
self.name = name
self.addre
ss = address
# 动作
def dalaohu(self):
print('%s%s%s打老虎' % (self.waihao, self.name, self.address))
def shasaozi(self):
print("这个人, 喜欢啥嫂子")
def titianxingdao(self):
print("替天行道")
ws = Person("行者", "武松", "景阳县")
ws.dalaohu()
ws.shasaozi()
ws.titianxingdao()
⽤⾯向对象的思维来完成⽤户登录.
# 用户登录的问题. 逻辑是活的
#
# 我的版本: 把所有的逻辑都写在类中
class User:
def __init__(self, username, password):
self.username = username
self.password = password
def login(self):
uname = input("请输入你的用户名")
upwd = input("请输入你的密码")
if uname == self.username and upwd == self.password:
print("登录成功")
else:
print("登录失败")
u = User("alex", "123")
u.login()
3.面向对象和面向过程的对比:
如果细一些比较小的程序用面向过程
程序很复杂,很庞大建议用面向对象
# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 超人
# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 蝙蝠侠
# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 蜘蛛侠
# 面向过程: 代码非常的冗余. 尤其是参数
def fight_superman(name, jineng):
print("%s使用%s攻击超人" % (name, jineng))
def fight_batman(name, jineng):
print("%s使用%s攻击蝙蝠侠" % (name, jineng))
def fight_spiderman(name, jineng):
print("%s使用%s攻击蜘蛛侠" % (name, jineng))
fight_superman('小猪佩奇', "嘴巴嘟嘟")
fight_batman('小猪佩奇', "嘴巴嘟嘟")
fight_spiderman('小猪佩奇', "嘴巴嘟嘟")
#面向对象
class Pig:
def __init__(self, name, jineng):
self.name = name
self.jineng = jineng
def fight_superman(self):
print("%s使用%s攻击超人" % (self.name, self.jineng))
def fight_batman(self):
print("%s使用%s攻击蝙蝠侠" % (self.name, self.jineng))
def fight_spiderman(self):
print("%s使用%s攻击蜘蛛侠" % (self.name, self.jineng))
pg = Pig("小猪佩奇", "嘴巴嘟嘟")
# 不需要向原来一样传递一样的参数了
# 面向对象的程序: 结果相对清晰. 缺点: 代码量比原来大, 上手太难
pg.fight_batman()
pg.fight_spiderman()
pg.fight_superman()
4.面向对象的三大特征: 封装, 继承,多态
封装: 1.对属性的封装(__init__), 2.对方法和功能的封装
继承: 子类自动拥有父类中除了私有内容外的其他所有内容
class Bar(fool): Bar对fool进行了扩展
pass
当出现x是一种y的时候. 推荐使用继承关系
python支持多继承. 查找顺序: 先找理他近的
# 当出现xxx是一种yyy类型的东西. 可以使用继承关系
# 猫是一种动物
class Animal:
def dong(self):
print("动物会动, 顾雍")
class Cat(Animal): # 子类其实是对父类的一种扩展
def catchMouse(self):
print("猫很皮, 抓老鼠")
c = Cat()
c.dong()
c.catchMouse()
# python支持多继承
class Foo1:
def getMoney(self):
print('给你个大嘴巴子')
def play(self):
print("玩儿")
class Foo2:
def getMoney(self):
print('给多点儿')
class Bar(Foo1, Foo2): # 离当前类最近的是亲爹, 后面的是干爹.
pass
b = Bar() # 就近原则, MRO的C3算法
多态(python原生直接就是多态)
python更多的之臣的是鸭子模型,只要会嘎嘎叫就是好鸭子
- 『现学现忘』Git对象 — 16、Tree对象详解
目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...
- 我说HashMap初始容量是16,面试官让我回去等通知
众所周知HashMap是工作和面试中最常遇到的数据类型,但很多人对HashMap的知识止步于会用的程度,对它的底层实现原理一知半解,了解过很多HashMap的知识点,却都是散乱不成体系,今天一灯带你一 ...
- OC基础16:复制对象
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.浅复制即是指针赋值,复制对象的修改会影 ...
- Python学习:16.Python面对对象(三、反射,构造方法,静态字段,静态方法)
一.构造方法 在使用类创建对象的时候(就是类后面加括号)就自动执行__init__方法. class A: def __init__(self): print('A') class B: def __ ...
- java面试-对象的创建、内存布局、访问定位
一.对象的创建 1.虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过.如果没有,那必须先执行相应的 ...
- Java岗 面试考点精讲(基础篇02期)
1. 两个对象的hashCode相同,则equals也一定为true,对吗? 不对,答案见下面的代码: @Override public int hashCode() { return 1; } 两个 ...
- [刘阳Java]_Java基础面试中的常识问题
1. anonymous inner class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 不行,对于匿名内部类,看到的一句话 ...
- 孙鑫MFC学习笔记16:异步套接字
16 1.事件对象 2.CreateEvent创建事件对象 3.SetEvent设置事件对象为通知状态 4.ResetEvent设置事件对象为非通知状态 5.InitializeCriticalSec ...
- php面试常用算法
这些都是真实的IT公司招聘PHP程序员的面试题,这些都是简单的基本算法.包括:冒泡算法.快速排序算法.二分查找算法.顺序算法. 冒泡排序,对象可以是一个数组 01 function bubble_so ...
随机推荐
- Http超文本传输协议
HTTP 简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传 ...
- GIT团队合作探讨之四--不同工作流优缺辨析
由于git非常强大,它可以支持非常多的协作模式,而可能正因为选择太多反而有时候对于我们如何开始开展团队协作无从下手.本文试图阐述企业团队中应用最为广泛的git 工作流,为大家理清思路,最大限度发挥gi ...
- How I explained OOD to my wife
Introduction My wife Farhana wants to resume her career as a software developer (she started her car ...
- 使用POI解析Excel时,出现org.xml.sax.SAXParseException: duplicate attribute 'o:relid'的解决办法
1.使用org.apache.poi解析excle,.xlsx类型文件InputStream is = new FileInputStream(strFileName);XSSFWorkbook wb ...
- ubuntu 安装nodejs和git
1.安装curl sudo apt-get install curl 2.安装nodejs 和 npm curl -sL https://deb.nodesource.com/setup_8.x | ...
- jQuery的事件绑定和解绑
1.绑定事件 $('获取的标签对象').bind('要操作的方法, {操作的内容 是字典的形式},function(){} ') 语法: bind(type,data,fn) 描述:为每一个匹配元 ...
- Python初学者第八天 元组和字典
8day 1.数据类型:元组 元组:有序的,不可变地数据的集合.但若包含其他可变元素,这些元素可变.显示的告诉别人,此处不可修改: a = (1,2,3,4,5,['1','a']) 2.数据类型:字 ...
- She must be at least thirty-five years old.
She must be at least thirty-five years old. Though life's goodness can at times be overshadowed,it i ...
- 洛谷 P4321 【随机漫游】
题目大意 给出\(n(n\leq 18)\)个点的无向连通图,\(m(m\leq 10^5)\)次询问.每次询问给出一个点集和一个起点\(s\),询问从\(s\)出发,经过这个点集中的每一个点至少一次 ...
- PHP----练习------球队列表
题目:页面上有一个ul球队列表当鼠标移动到某个li上的时候改行背景颜色变红,当点击某个li的时候,让该li之前的所有li背景色变黄,之后的所有li背景色变蓝.自己不变色. <!DOCTYPE h ...