面向对象 小结
1:面向对象:就是一种编程思想 简称oop,指挥某某完成能完成的功能 2:面向对象与面向过程的优缺点 :
面向过程: 优点: 复杂问题简答化(一步一步解决), 流程化,
缺点:机械化 扩展性差 牵一发动全身
面向对象: 优点:提高了扩展性 复用性 可维护性提高
缺点:无法预知完成的结果 令程序复杂程度变高了 3:应用场景;
面向对象:适合扩展性高的程序 适合需求经常修改增加的程序
面向过程:适合扩展性低的程序 4:类和对象
对象:属性和技能的结合体
类:一系列相同属性和相同技能的集合体
注意:在面向对象的过程中,是先产生类,然后再去产生对象. 5:面向对象编程的思考过程
如果遇到面向对象的问题,首先想到的需要哪些对象,这些对象具备哪些属性和技能,再根据这些属性和技能去创建类,最后在创建对象出来 6:类和对象的创立
class Axxx: # 创建类 class
pass
A() # 创建对象 7:初始化__init__方法
定义:为对象属性设置初始值的函数
class A:
def __init__(self,属性名称,属性名称) # 这些是对象的初始值定义
self.属性名称 = 属性名称
self.属性名称 = 属性名称
def skill(self): # 这是技能(方法)函数
pass
a = A (属性名称1,)
a.属性名称 == A(属性名称1)
创建对象的时候时内部发生的事情:
首先会创建出一个名称空间 用来保存对象数据 ,此时自动调动__init__函数 ,自动把对象本身和属性绑定在一起.
注意点:有__init__函数时 传参不能为空,传入与__init__相对应的参数 8:绑定方法与非绑定方法
绑定方法:实质就是绑定函数
绑定方法---绑定到对象的方法 :类中默认的都是绑定到对象的方法
特点:参数的第一个必须是self 表示当前对象本身,使用对象来调用,调用时会自动传入对象
绑定方法- --绑定到类方法:用classmethon装饰器的方法,,,
特点:参数的第一个必须是cls表示当前类本身,使用类名来调用,调用时会自动传入类
非绑定方法: 用staticmethod装饰器装饰的方法
特点:不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说 class Student:
school = "Tsinghua" def say_hello(self):# 绑定到对象的方法
print(self)
print("hello i am a student my name is %s" % self.name) def __init__ (self,name): #绑定到对象的方法
self.name = name
@classmethod # 绑定到类的方法
def school_info(cls):
print(cls)
print("the student from %s" % cls.school) stu1 = Student("Jack")
print(stu1)
#输出 <__main__.Student object at 0x1063112e8> #1.调用对象绑定方法
stu1.say_hello()
#输出 <__main__.Student object at 0x1063112e8>
#输出 hello i am a student my name is Jack #查看对象绑定方法
print(stu1.say_hello)
#输出 <bound method Student.say_hello of <__main__.Student object at 0x10552b2e8>>
#含义 这个绑定方法是Student类中的say_hello函数,绑定到地址为0x10552b2e8的Student对象 #绑定方法本质上也是函数 只要能找到它就能调用它所以你可以这样来调用它
Student.say_hello(stu1)
#输出 <__main__.Student object at 0x103818390>
#输出 hello i am a student my name is Jack print(Student)
#输出 <class '__main__.Student'>
#2.调用类绑定方法
Student.school_info()
#输出 <class '__main__.Student'>
#输出 the student from Tsinghua #查看类绑定方法
print(Student.school_info)
#输出 <bound method Student.school_info of <class '__main__.Student'>>
#含义 这个绑定方法是Student类中的school_info函数,绑定到Student这个类 9:类的继承 抽象
继承定义:一个类中属性和方法可以被另一个类引用时 就是继承
抽象:就是A类 B类 有部分相同的属性和方法也不同的属性方法 那么将共同相同的属性和方法拿出来创建一个新的C类 两个类在去继承C类就好了
class A:
pass
class B(A)
pass
# B类继承A类 那B类的对象就可以使用A类对象的属性和方法 A类就是父类 B类就是子类 class Teacher:
def __init__(self,name,gender,age):
self.name = name
self.gender = gender
self.age = age
def say_hi(self):
print("hi my name is %s age is %s gender is %s" % (self.name,self.age,self.gender)) class Student(Teacher): #指定Teacher类继承Student类
pass #创建两个对象
t1 = Teacher("Jack","man",20)
t1.say_hi()
s1 = Student("Maria","woman",20)
s1.say_hi() 10:派生和覆盖
派生:子类不同于父类的属性和方法
覆盖:子类中的属性和父类的名称一致 优先使用子类的属性和方法 11:子类中重用父类的方法
1:直接用类名调用 无继承也可是调用
2:super()函数
class A:
def __init__(self,name,,age,gender)
self.name = name
......
class B(A):
def __init__(self,name,,age,gender,sleep) # 子类多一个属性sleep
super().__init__(name,,age,gender) # 继承父类的三个属性
self.sleeo = sleep # 添加的属性 12:接口 抽象类
接口:就是一套规范 按照这个规范来就可以被使用
抽象类:如果这个类中的方法是不具体(没有实现功能的代码)的抽象的,那么这个类也是抽象的;
导入 import abc 模块来使用的 用@abc.abstractmethod 装饰器
#_*_coding:utf-8_*_
#一切皆文件
import abc #利用abc模块实现抽象类 class All_file(metaclass=abc.ABCMeta):
all_type='file'
@abc.abstractmethod #定义抽象方法,无需实现功能
def read(self):
'子类必须定义读功能'
pass @abc.abstractmethod #定义抽象方法,无需实现功能
def write(self):
'子类必须定义写功能'
pass # class Txt(All_file):
# pass
#
# t1=Txt() #报错,子类没有定义抽象方法 class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('文本数据的读取方法') def write(self):
print('文本数据的读取方法') class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('硬盘数据的读取方法') def write(self):
print('硬盘数据的读取方法') class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('进程数据的读取方法') def write(self):
print('进程数据的读取方法') wenbenwenjian=Txt() yingpanwenjian=Sata() jinchengwenjian=Process() #这样大家的使用方法时完全一致的,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read() print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengwenjian.all_type) 13;组合
组合定义:在一个类中以另外一个类的对象作为数据属性 则是类的组合
类可以继承使用也可以组合使用 class Equip: #武器装备类
def fire(self):
print('release Fire skill') class Riven: #英雄Riven的类,一个英雄需要有装备,因而需要组合Equip类
camp='Noxus'
def __init__(self,nickname):
self.nickname=nickname
self.equip=Equip() #用Equip类产生一个装备,赋值给实例的equip属性
r1=Riven('锐雯雯')
r1.equip.fire() #可以使用组合的类产生的对象所持有的方法 14:鸭子类型
定义:长得像鸭子(技能) 走路像鸭子 叫声像鸭子(属性) 那就就是鸭子
class PC(): def conntent_device(self, usb_device):
usb_device.open()
usb_device.work()
usb_device.close() class Mouse:
# 实现接口规定的所有功能
def open(self):
print("mouse opened") def work(self):
print("mouse working...") def close(self):
print("mouse closed") mouse = Mouse()
pc = PC() pc.conntent_device(mouse) class KeyBoard:
def open(self):
print("KeyBoard opened") def work(self):
print("KeyBoard working...") def close(self):
print("KeyBoard closed") key1 = KeyBoard() # 如果key1的特征和行为都像USB设备 那就把它当做USB设备来使用
# 对于使用者而言可以不用关心这个对象是什么类,是如如何是实现,
pc.conntent_device(key1) 15:属性的查找方法的顺序
对象---子类>--->父类--->父类的父类.....object. object是所有的类的基类
子类有多个父类时,运用mro列表展示的顺序来查找
print(A.mro()) 就是A类的查找顺序

python-面向对象小结的更多相关文章

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

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

  2. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  3. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  4. Python面向对象编程(上)

    Python不仅支持面向过程编程,同时也支持面向对象编程.面向工程就是分析解决问题所需的步骤,然后用函数把这些步骤逐一实现,使用的时候再一个个调用函数就可以.面向对象则是把解决的问题按照一定规则划分为 ...

  5. python面向对象-三大特性

    python面向对象编程三大特性 小结:前面我们说完了类和对象的关系,相信对类和对象的理解更加透彻..让我们一起去研究面向对象的三大特性吧.... 继承 1.什么继承? 在程序中继承就是事物之间的所属 ...

  6. 【转】python面向对象中的元类

    type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello.py模块: class Hel ...

  7. 23 Python 面向对象

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

  8. 10. Python面向对象

    Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.如果接触过java语言同学应该都知道,Java面向对象三大特征是:封装.继承.多态.Pytho ...

  9. Python面向对象的高级编程

    数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念. 使用__slots__ ...

  10. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

随机推荐

  1. 隐马尔可夫随机场HMM

    概率知识点: 0=<P(A)<=1 P(True)=1;P(False)=0 P(A)+P(B)-P(A and B) = P(A or B) P(A|B)=P(A,B)/P(B) =&g ...

  2. why rpc

    why rpc 单体应用业务复杂, 大集群部署时对数据库的连接是个考验, 维护这个应用也比较费劲(一群人维护,容易代码冲突) 拆分后 各服务之间的接口依赖不能使用httpClient来搞,一是效率太低 ...

  3. 85)PHP,PHP处理mysql的函数种类

    首先,就我知道的,一共有三种: 自己用过的是mysql和mysqli,还没用过PDO_mysql 有时,随着我们的各种东西版本的更新,会遇到某一个扩展用不了的情形,所以,就有了编写完成相同功能的使用不 ...

  4. LeetCode No.73,74,75

    No.73 SetZeroes 矩阵置零 题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 输入: [   [1,1,1],   [ ...

  5. Linux BASH简单总结

    BASH: 变量的设置规则: 1.变量与变量内容以一个符号"="来链接 2.等号两边不能直接接空白字符 3.变量名称只能是英文字母与数字,但是不能以数字开头 4.变量内容若有空白字 ...

  6. python学习笔记(8)迭代器和生成器

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...

  7. smtp 邮件传输协议 qq版实现

    qq: telnet smtp.qq.com 587 (qq邮箱说明:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28& ...

  8. SpringBoot之HandlerInterceptor拦截器的使用 ——(三)获取requestBody解决java.io.IOException: Stream closed

    原文地址:https://blog.csdn.net/zhibo_lv/article/details/81875705 感谢原作者

  9. markdown常见用法

      命令  生成目录  [TOC]  插入标题  # 一级标题## 二级标题### 三级标题#### 四级标题##### 五级标题###### 六季标题  插入shell 开头:```shell 结尾 ...

  10. XML的打包与解析

    XML的打包与解析 一.XML语言的特点       1.XML独立于任何编程语言,允许人们按接收者容易解析的方式,对复杂数据进行编码.先来看一个简单的XML格式的文件: [XML] 纯文本查看 复制 ...