python面向对象(一)
面向对象
1.初始面向对象
面向过程:
一切以事务的发展流程为中心.
面向对象:
一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象
打比方:
面向过程
大象进冰箱
步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门
面向对象:
大象, 你进冰箱.
此时主语是大象. 我操纵的是大象. 此时的大象就是对象
2. 类和对象
类: 就是图纸. 创建对象的第一步. 先画图纸. 先写类.
对象: 对象就是车. 通过图纸造出来的具体的东西. 通过类来创建对象
类与对象的关系:
类是对xxx事物的归类.
def __init__(self, 参数) 参数一般作为属性设置给对象. 对象就是self, 对属性的封装.
pass
def 方法(self, 参数): 方法. 第一个参数一般是固定的self. 当前类的对象.
pass
对象是xx类型的一个具体
创建对象: 类名()
创建类:
class 类名:
def __init__(self): # 初始化方法. 又被成为构造方法
self.属性 = 值
def fangfa(self):
方法体(函数体, return)
创建对象:
变量 = 类名() # 实例化 <-> 创建对象
变量.属性 # 访问对象的属性信息
变量.方法() # 访问类中的方法
class heshang: def __init__(self, fh, name, miao): self.fahao = fh self.name = name self.miao = miao def nianjing(self): print("和尚会念经") def huayuan(self): print("和尚会化缘") lzs = heshang("花和尚", "鲁智深", "梁山水庙") lzs.nianjing() lzs.huayuan()
3. 面向对象和面向过程的对比
如果写一些比较小的程序用面向过程.
程序很复杂. 很庞大建议用面向对象.
4. 面向对象的三大特征
封装:
1. 对属性的封装(__init__())
self.xxx = xxx
2. 对方法和功能的封装
class student: def __init__(self, num, name, clazz): self.num = num self.name = name self.clazz = clazz stu = student("10010", "曹宝宝", "三年二班") stu2 = student("10086", "王迪", "三年一班") def teach(s): print("教他%s语文课" % (s.name)) teach(stu) teach(stu2)
继承
子类自动拥有父类中除了私有内容外的其他所有内容
class bar(foo): bar对foo进行了扩展
pass
当出现x是一种y的时候. 推荐使用继承关系
python支持多继承. 查找顺序: 先找离他近的.
class base1: def f1(self): print("base1.1") def f2(self): print("base1.f2") def f3(self): print("base2.f3") self.f1() class base2: def f1(self): print("base2.f1") class foo(base1,base2): def f0(self): print("foo.f0") self.f3() obj = foo() obj.f0()
多态 (python原生直接就是多态)
python更多的支持的是鸭子模型,只要会叫就可以
class animal: def chi(self): print("会吃") class goldenmonkey(animal): def chi(self): print("用手拿着吃, 五花八门") class tiger(animal): def chi(self): print("老虎吃肉") class elephant(animal): def chi(self): print("大象吃香蕉") def wei_animal(ani): ani.chi() t = tiger() m = goldenmonkey() e = elephant() wei_animal(t) wei_animal(m) wei_animal(e)
推荐阅读
-
html5编辑API之range对象(一)
-
编写Python脚本把sqlAlchemy对象转换成dict的教程
-
解决pyinstaller在单一文件时无法正确添加权限清单问题,(UAC,uac_admin,manifest,asInvoker,python,requireAdministrator)
-
猪肉涨价飞快?让我们用python来预测一下今年最后一个月的猪肉价格吧!
-
每日一题:面向对象的特征有哪些?
-
面向过程和面向对象
-
面试官:请说一下对象锁和类锁的区别
-
分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)
-
Ubuntu18.04一次性升级Python所有库的方法步骤
-
Python进阶(一)——安装Python、程序执行、Python模块和IDLE调试