今日主要内容
一. 面向对象思想
1. 面向过程. 重点在'过程'. 按照事物迭代发展流程.
优点: 简单,流水线式的操作
缺点: 可扩展性差.可维护性差.
2. 面向对象. 对象是属性和动作的集合体.对象是一个抽象概念
重点在'对象':属性和动作.
(先创建一个大象,然后让大象进冰箱就可以了,具体大象如何进的冰箱由大象来完成.)
类似上帝式思维. 优点: 可扩展性强(多态)
缺点: 编写相对比较复杂. 上手比较难. 面向对象和面向过程各有千秋 二. 面向对象如何编写
在代码中定义一个类,相当于画图纸
class 类名: #驼峰,类名首字母大写
pass 创建对象: 类名()
1. 构造方法:
def __init__(self, 属性):
self.属性 = 属性
2. 普通方法
def 方法名(self, 参数列表):
pass
self: 表示当前类的对象. 当前正在执行这个动作的对象.
对象.方法()
类名.方法(对象,参数) e.g.
#定义一辆车
class Car:
#出厂设置 (__init__) 构造方法,所有方法的第一个参数不用给
def __init__(self, colour, pai, pailiang, own) #self 表示当前类的对象
print('我在造车')
print(self)
#绑定属性.
# self.colour = '红色'
# self.pai = '京A66666'
self.colour = colour
self.pai = pai
self.pailiang = pailiang
self.own = own c = Car('黑色', '黑B88888', '2.0t', 'alex')
c1 = Car() 系统会自动调用__init__方法.并将Car()传给self
c2 = Car() 自动调用__init__函数(方法) #创造一辆车,创建对象
c= Car() #类名()
print(type(c)) #<class '__main__.Car'> c1 = Car() #创建新对象,又叫做实例化 #类是一个概念. 对象:具体的实例
c1.colour = '白色'
c1.pai = '京B22222'
c1.pailiang = '1.6t'
c1.own = '小猪佩奇'
print(id(c), id(c1))
print(c1.pai)
print(c.own) #函数(方法) class Car():
def __init__(self, colour, pai, pailiang, own):
self.colour = colour
self.pai = pai
self.pailiang = pailiang
self.own = own #车能跑,跑是一个动作,要写函数(方法)
def run(self): #self: 当前类的对象
print('%s颜色的车在疯狂的跑' % self.colour)
print(self) c1 = Car('红','京A11111', '1.5L', '小猪佩奇')
c1.run() #对象,方法() 用谁访问,self就是谁 --------------------------------------
class House:
pass h = House()
h.colour = '红色'
h.size = '500平米'
h.floor = '两层'
h.owner = 'Sara' print(type(h)) h1 = House()
h1.colour = '白色'
h1.size = '250平米'
h1.floor = '1层'
h1.owner = 'John' print(id(h), id(h1))
print(h1.colour)
print(h.colour) --------------------------------------------
class Meal:
def __init__(self):
self.food = '米饭'
self.dish = '鱼香肉丝'
self.drink = '可乐' m = Meal()
print(m.food)
m.dish = '宫保鸡丁'
print(m.dish) m1 = Meal()
print(m1.dish) ---------------------------------------------
class House:
def __init__(self, colour, size, floor, owner):
self.colour = colour
self.size = size
self.floor = floor
self.owner = owner H1 = House('红色', '1000平米', '4层', '王尔德')
print(H1)
print(H1.colour)
print(H1.size) H2 = House('米黄', '500平米', '2层', '布莱曼')
print(H2.colour)
print(H2.size)
print(H2)
class HaoHan: # 驼峰. 类名首字母大写.
def __init__(self, name, waihao, jineng):
self.name = name
self.waihao = waihao
self.jineng = jineng def ganLaoHu(self):
print("%s, %s 在干老虎" % (self.waihao, self.name)) def shaSaoZi(self):
print("%s, %s 在杀嫂子" % (self.waihao, self.name)) def tiTianXingDao(self):
print("%s, %s 在替天行道" % (self.waihao, self.name)) wusong = HaoHan("武松", "行者", "喝酒") wusong.ganLaoHu()
wusong.shaSaoZi()
wusong.tiTianXingDao()

构造方法

class HeShang:

    def __init__(self, fahao, mingzi, age, miao):
self.fahao = fahao
self.mingzi = mingzi
self.age = age
self.miao = miao def nianjing(self):
print("%s在念经" % self.fahao) def quxifu(self, xifu):
print("%s取了个媳妇:%s" % (self.fahao, xifu)) hs = HeShang("秃驴", "alex", 38, "路飞庙")
hs.nianjing()
hs.quxifu("wusir")

普通方法

class Account:

    def __init__(self, username, pwd):
self.username = username
self.pwd = pwd def login(self):
if self.username == 'alex' and self.pwd == '':
return True
else:
return False acc = Account('alex', '')
print(acc.login())

用户登录


三. 面向对象和面向过程的对比(代码,思想)
结论: 根据不同的业务逻辑, 来决定用哪种思想. 面向对象PK面向过程
装大象, 脚本
print("打开冰箱门")
print("装大象")
print("关上冰箱门") 函数式编程
def kaimen():
print("打开冰箱门")
def zhuangdaxiang():
print("装大象")
def guanmen():
print("关门")
kaimen()
zhuangdaxiang()
guanmen() 面向对象
class Elephant: def open(self):
print("大象会开门")
def zhuang(self):
print("把自己装进去")
def close(self):
print("把门关上") # 创建大象
e = Elephant()
e.open()
e.zhuang()
e.close() # 第一回合. 面向过程赢
# 第二回合. 小猪佩奇(name, age, 技能)大战奥特曼, 蜘蛛侠, 蝙蝠侠
# 函数式
def da_ao_te_man(name, age, jineng):
print("%s, %s岁了, 用技能%s 打奥特曼" % (name, age, jineng))
def da_zhi_zhu_xia(name, age, jineng):
print("%s, %s岁了, 用技能%s 打蜘蛛侠" % (name, age, jineng))
def da_bian_fu_xia(name, age, jineng):
print("%s, %s岁了, 用技能%s 打蝙蝠侠" % (name, age, jineng)) da_ao_te_man("小猪佩奇", 40, "嘴巴嘟嘟")
da_zhi_zhu_xia("小猪佩奇", 40, "嘴巴嘟嘟")
da_bian_fu_xia("小猪佩奇", 40, "嘴巴嘟嘟") # 面向对象
class Pig: def __init__(self, name, age, jineng):
self.name = name
self.age = age
self.jineng = jineng def da_ao_te_man(self):
print("%s, %s岁了, 用技能%s 打奥特曼" % (self.name, self.age, self.jineng))
def da_zhi_zhu_xia(self):
print("%s, %s岁了, 用技能%s 打蜘蛛侠" % (self.name, self.age, self.jineng))
def da_bian_fu_xia(self):
print("%s, %s岁了, 用技能%s 打蝙蝠侠" % (self.name, self.age, self.jineng)) peiqi = Pig("小猪佩奇", 40, "嘴巴嘟嘟") # 把这三个属性封装到了一个对象里.
peiqi.da_ao_te_man()
peiqi.da_zhi_zhu_xia()
peiqi.da_bian_fu_xia() # 平手. 当属性和方法非常多的时候, 才能感觉到面向对象的好.
# 你要知道. 面向对象和面向过程都是思想. 用哪一个取决于业务逻辑.

四. 面向对象的三个特征(记下来)
1. 封装: 把具有相同属性和功能的内容封装在一个对象中
2. 继承: 子类可以自动拥有父类中 除了私有属性外的其他所有内容. 好处:两个类具有相同的功能或特征时,可以避免写很多重复的功能和代码.
3. 多态: 同一类的对象. 可以拥有多种形态,本质是子类通过重写父类的方法,使得对同一类对象调用同一个方法,产生不同结果. python原生自带多态性. e.g.父类中定义了eat方法,子类中又重新定义了eat方法. 继承
class Fa:
def play(self):
print('Fa中的play')
def func(self):
print('我是一号') class Fa2:
def play(self):
print('Fa2中的play')
def tool(self):
print('我是2号') class Son(Fa, Fa2): #可以从多个类中继承,调用顺序先找自己,再从左到右按顺序继承
pass s = Son()
s.func()
s.tool()
s.play()

一个子类继承多个父类

class Pet:
def __init__(self, name):
self.name = name def eat(self):
print('吃')
def sleep(self):
print('睡') class Cat(Pet):
def catch_mouse(self):
print('%s喜欢抓老鼠' % self.name) class Dog(Pet):
def chaijia(self):
print('%s喜欢拆家' % self.name) c = Cat('Tom')
c.catch_mouse()
c.eat()
c.sleep() d = Dog('John')
d.chaijia()
d.eat()
d.sleep()

多个子类继承一个父类

多态

# # 变量 = 类名()
# c = Cat() # 猫类型的
# python本来就是多态. 里面没有所谓的类型. class Animal:
def chi(self):
print("所有的动物都会吃") class Haski(Animal):
def chi(self):
print("疯了一样的吃") class Monkey(Animal):
def chi(self):
print("龇牙咧嘴的吃") class Tiger(Animal):
def chi(self):
print("跟猫一样的吃") class Elephant(Animal):
def chi(self):
print("大象用鼻子卷着吃") class YingWu(Animal):
def chi(self):
print("xxxxx") class SiYangYuan:
def wei(self, ani): # 多态性. 超强的可扩展性. 不论传递进来的是什么. 都统一当成动物来对待.
ani.chi() syy = SiYangYuan() # 造动物
hou = Monkey()
ha = Haski()
lao = Tiger()
yw = YingWu() syy.wei(ha)
syy.wei(hou)
syy.wei(lao)
syy.wei(yw)
class Car:
def run(self, speed):
print("车能跑%s迈" % speed) c = Car() # 实例化一个对象
Car.run(c, 50)
c.run(50)

类.动作(对象,参数) = 对象.动作(参数)

Day16--Python--初识面向对象的更多相关文章

  1. python - 初识面向对象

    1.初识面向对象       面向过程:一切以事务的发展流程为中心           优点:负责的问题流程化,编写相对简单         缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...

  2. Python初识面向对象

    初识面向对象 面向过程 VS 面向对象 面向过程的圣墟设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点是:极大的降低 ...

  3. python之路--初识面向对象

    一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...

  4. python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)

    一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...

  5. python全栈开发从入门到放弃之初识面向对象

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  6. 巨蟒python全栈开发-第16天 核能来袭-初识面向对象

    一.今日内容总览(上帝视角,大象自己进冰箱,控制时机) #转换思想(从面向过程到面向对象) 1.初识面向对象 面向过程: 一切以事物的发展流程为中心. 面向对象: 一切以对象为中心,一切皆为对象,具体 ...

  7. python基础(23):面向过程与面向对象的优劣、初识面向对象

    1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...

  8. Python 入门 之 初识面向对象

    Python 入门 之 初识面向对象 1.初识面向对象编程 (核心--对象) (1)观察以下代码: # 面向过程编程 s = "alexdsb" count = 0 for i i ...

  9. 【学习笔记】--- 老男孩学Python,day16-17 初识面向对象,类名称空间,查询顺序,组合

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  10. python学习之老男孩python全栈第九期_day022知识点总结——初识面向对象

    一. 面向对象的引入# 人狗大战 def person(name,HP,aggr,sex): person = { 'name':name, # 昵称 'HP':HP, # 生命值 'aggr':ag ...

随机推荐

  1. spring 标签

    */ @Slf4j @Service public class RetryService { @Autowired private MqConfig mqConfig; /** * 如果网络连接失败, ...

  2. python数据结构与算法第四天【代码执行时间测试模块】

    #!/usr/bin/env python # _*_ coding:UTF-8 _*_ from timeit import Timer def foo(): ''' 使用append方式向列表添加 ...

  3. java_manual的一点体会

    最近看了一下Alibaba的java_manual1.4,看了感觉有很多好的标准,这里摘录一些,也帮助自己的代码更加规范化 先放一些MySQL的规范: 这里附上MySQL官网给的参考手册上的 关键字和 ...

  4. js对日期的判断

    在初始页面获取倒当前时间并向前推N天后作为起始时间       function date(){          var myDate = new Date();          //获取当前时间 ...

  5. CentOS 7 vi编辑命令

    用vi打开一个yum文件 vi /usr/bin/yum 按 i 键后  进入insert模式,进入insert模式后才能进行修改 修改完成后 按esc键进入command模式, 然后:wq 保存文件 ...

  6. Vue可复用过渡和动态过渡

    前面的话 本文将详细介绍Vue可复用过渡和动态过渡 可复用过渡 过渡可以通过 Vue 的组件系统实现复用.要创建一个可复用过渡组件,需要做的就是将 <transition> 或者 < ...

  7. 当考虑到并发问题时候,我们需要将给表插入id的代码挪到service中,目的是将其放到一个事务中,保准事务的一致性

  8. codeforces982F

    The Meeting Place Cannot Be Changed CodeForces - 982F Petr is a detective in Braginsk. Somebody stol ...

  9. fiddler软件测试——Fiddler抓取https设置详解(图文)

    强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)转 本文主要说明了自己在设置fiddler抓取https过程中所遇到的问题及解决步骤,特别是fiddler在设置证书的环节遇到的各 ...

  10. mfs 使用心得

    CentOS的安装方法: To install MooseFS from officially supported repository on EL7, follow the steps below: ...