object oriented programming

干啥的

1.避免重名(封装)

2.避免代码重复(继承)

3.将复杂的流程抽象地封装起来

4.模块化程度高,应对复杂编程问题

1)划分职责-要做的事情方法:函数

2)根据行使职责主体:区分不同的对象

3)一个对象实现多个职责:封装多个不同的方法

特征:

封装,继承,多态

类,对象(实例)

属性,行为(方法) 抽象成类

类实例化成对象

类命名:每个单词首字母大写,中间无下划线连接

类是一个特殊的对象,也会被加载到内存,但只有一份

类属性,类方法; 实例属性,实例方法;静态方法

实例会优先查找实例属性,再找类属性。 类属性也可以继承

class Person:
count = 0 #__init__外的是类属性,类似static 这里用于记录这个类创建了几个实例(有几个人) @classmethod
def f(cls): #类方法
print(cls.count) #cls. 可以调用类属性和类方法 @staticmethod
def run(): #静态方法
print("人在跑")#不需要使用类属性类方法也不需要使用实例属性和实例方法 def __init__(self, name): #实例方法
self.name = name #__init__里的是 实例属性
Person.count += 1 #用 类名. 访问类属性 x = Person('zhao')
Person.f() #类名调用
Person.run()或x.run() #均可

访问类属性/方法时不要用实例.,应该用类.,否则可能会出现新建了一个实例属性的问题

注意类属性是会继承的,但是有些毛病。如A,B(A),C(B), 如果只在A中定义类属性cnt

那么A.cnt+=1是使A,B,C得cnt都加1,B.cnt+=1是使B,C的cnt都加1.即后继加

封装

继承是不会创建父类的实例的,即不会调用父类的__init__

dir(a)用于获得 类/对象 a中的 属性/方法

a.blabla=blabla可以给对象添加属性(不建议!)

__name私有属性或私有方法。本质被python处理成了_类名__name,所以是伪私有

__init__(self,...)方法,类实例化时的初始化函数,构建类时()内的东西即init中传参。属性可在这里定义

__del__(self)方法,类被回收时调用. 如程序结束或使用del classname

__str__(self)方法,类被print时显示什么。必须返回字符串。默认返回类名+地址

__new__(cls)方法,构建类时先调用new分配空间再init。默认调用super().__new__(cls)

__mro__属性,类被调用方法的查找顺序。如多继承时C(A,B)先看C再看A再看B再看object

继承

class 子类(父类): 或称作派生类(基类)

class 子类(父类1,父类2,...):多继承,避免又重复方法。

联系__mro__思考上面多继承的重复方法问题,和继承时的方法重写

python3会自动在最靠后的位置继承object类,内有一些类的基本属性和方法(新式类)

而python2中默认没有继承object类(经典类)

所以为了兼容,用class A(object),而class B(A)没必要再加object(爷爷边没有用)

多态

用相同方法名即可重写方法

在新方法内用super().方法可以调用直接父类的方法(不能是父实例),可用于原方法的扩展

单例

使用模块

或修改__new__(cls),增加类属性instance,存储None或对象地址,在new里加if语句判断该变量是否为None

这样每一次调用cls()返回的地址相同,称单例

如果要避免每次初始化,__init__同理设置类属性flag即可

如果要实现回收, __del__里恢复init的flag和new的instance即可

python OOP的更多相关文章

  1. Python OOP(1):从基础开始

    本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassName(object): """docstring for ClassNam ...

  2. <转>Python OOP(1):从基础开始

    转自  http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...

  3. Python OOP(面向对象编程)

    一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...

  4. python>oop

    oop即Object Oriented programming,面向对象编程 何为编程:特定的语法+数据结构+算法 编程范式就是从经验中总结的套路: 面向过程编程 适用于简单的脚本,一次任务是极好的, ...

  5. javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点

    主要是javascript中消除字符串空格,比较两种方式的不同 //面向对象,消除字符串两边空格 String.prototype.trim = function() { return this.re ...

  6. Python OOP面向对象

    一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...

  7. Python OOP 面向对象

    1.Python实现OOP可以概括为三个概念: 继承:基于Python属性查找 多态:在x.method中,method的意义取决于x的类型 封装:方法和运算符实现行为,数据隐藏是一种惯例 2.委托: ...

  8. python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)

    把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...

  9. Python OOP知识积累

    目录 目录 前言 对象 类 面向对象 Python 面向对象编程三个基本特征 封装 继承 继承的作用 泛化与特化 实现继承的方式 多重继承 多态 方法多态 最后 前言 Python是一个功能非常强大的 ...

  10. python oop __slots__方法

    动态语言python 可以在程序运行的情况下给class加上功能.具体为 #引入一个 from types import MethodType #方法 #然后 s.set_age = MethodTy ...

随机推荐

  1. MySQL单机优化---SQL优化

    SQL优化(变多次维护为一次维护) Sql优化分为:DDL.DML.DQL 一.DDL优化 1 .通过禁用索引来提供导入数据性能 . 这个操作主要针对有数据库的表,追加数据 //去除键 alter t ...

  2. [NOIP2016]天天爱跑步-题解

    题面传送门 解答 设第\(j\)号玩家在\(V_j\)时刻出发. 弱化问题:如果树退化成了一条链.则在\(j\)处的观察员能观察到的\(i\)号玩家当且仅当 \[ i玩家经过j,且 \begin{ca ...

  3. Deleaker – 内存泄漏猎人(RAD Studio 的附加组件)

    程序员面临(并希望我们意识到)的常见问题之一是内存泄漏或任何其他类型的资源泄漏.例如,Windows限制了进程一次可以分配的GDI或USER32对象的数量.当事情走错路时,您可能希望拥有一些工具来帮助 ...

  4. Django框架之第四篇(视图层)--HttpRequest对象、HttpResponse对象、JsonResponse、CBV和FBV、文件上传

    视图层 一.视图函数 一个视图函数,简称视图,是一个简单的python函数,它接收web请求并且会返回web响应.响应可以是一张网页的html,一个重定向,或者是一张图片...任何东西都可以.无论是什 ...

  5. QT5的QChart使用记录

    如果需要在QT中使用QChart类,需要在安装的时候勾选QChart选项,在工程的 .pro 文件里面添加 QT += charts 语句,包含 QChart 头文件就行了. 对于图表的显示,可以先拖 ...

  6. 【MySQL】各种小坑-持续更新

    中文乱码问题 在建表的时候额外执行 ALTER TABLE camera CONVERT TO CHARACTER SET utf8; 如果还是不行注意看一下precision,为2的时候容易出现?? ...

  7. 处女篇:自用C#后端SqlHelper.cs类

    自用SqlHelper.cs类,此类来自软谋教育徐老师课程SqlHelper.cs! using System; using System.Collections; using System.Coll ...

  8. kube-state-metrics 详解

    原文:https://mp.weixin.qq.com/s/176eyFBknzdA5wpiJrxDSg 概述 已经有了 cadvisor.heapster.metric-server,几乎容器运行的 ...

  9. Python进阶----粘包,解决粘包(旗舰版)

    Python进阶----粘包,解决粘包(旗舰版) 一丶粘包 只有TCP有粘包现象,UDP永远不会粘包 什么是粘包     存在于客户端接收数据时,不能一次性收取全部缓冲区中的数据.当下一次再有数据来时 ...

  10. 【面试突击】-Redis常见面试题(一)

    介绍:Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API的非关系型数据库. 传统数据 ...