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. LeetCode 421. 数组中两个数的最大异或值(Maximum XOR of Two Numbers in an Array) 71

    421. 数组中两个数的最大异或值 421. Maximum XOR of Two Numbers in an Array 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, - , a ...

  2. [转帖][区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得

    [区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得 置顶 2017-03-12 18:31:19 乐扣老师lekkoliu 阅读数 127953  收藏 更多 分类专栏: 技术管理 区 ...

  3. 通过Fastdfs进行文件上传服务(文件和图片的统一处理)

    1.文件上传简单流程分析图: 2.Fastdfs介绍: Fastdfs由两个角色组成: Tracker(集群):调度(帮你找到有空闲的Storage) Storage(集群):文件存储(帮你保存文件或 ...

  4. Python yield与实现(源码分析 转)

    转自:https://www.cnblogs.com/coder2012/p/4990834.html

  5. 论文笔记: Matrix Factorization Techniques For Recommender Systems

    Recommender system strategies 通过例子简单介绍了一下 collaborative filtering 以及latent model,这两个方法在之前的博客里面介绍过,不累 ...

  6. Java ClassLoader 学习理解

    /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p> * <p> ...

  7. Matlab工厂模式

    工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类.工厂模式主要分为简单工厂模式.工厂方法模式以及抽象工厂模式. Obj.m classdef Obj ...

  8. MySQLNonTransientConnectionException: Could not create connection to database server.

    MySQLNonTransientConnectionException: Could not create connection to database server. Spring整合mybati ...

  9. 【转载】C#中Convert.ToDecimal方法将字符串转换为decimal类型

    在C#编程过程中,可以使用Convert.ToDecimal方法将字符串或者其他可转换为数字的对象变量转换为十进制decimal类型,Convert.ToDecimal方法有多个重载方法,最常使用的一 ...

  10. LCD 驱动 S3C2440A

    LCD Control 1 Register 以16BPP为例 LCD Control 2 Register LCD Control 3 Register LCD Control 4 Register ...