python OOP
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的更多相关文章
- Python OOP(1):从基础开始
本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassName(object): """docstring for ClassNam ...
- <转>Python OOP(1):从基础开始
转自 http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...
- Python OOP(面向对象编程)
一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...
- python>oop
oop即Object Oriented programming,面向对象编程 何为编程:特定的语法+数据结构+算法 编程范式就是从经验中总结的套路: 面向过程编程 适用于简单的脚本,一次任务是极好的, ...
- javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点
主要是javascript中消除字符串空格,比较两种方式的不同 //面向对象,消除字符串两边空格 String.prototype.trim = function() { return this.re ...
- Python OOP面向对象
一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...
- Python OOP 面向对象
1.Python实现OOP可以概括为三个概念: 继承:基于Python属性查找 多态:在x.method中,method的意义取决于x的类型 封装:方法和运算符实现行为,数据隐藏是一种惯例 2.委托: ...
- python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)
把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...
- Python OOP知识积累
目录 目录 前言 对象 类 面向对象 Python 面向对象编程三个基本特征 封装 继承 继承的作用 泛化与特化 实现继承的方式 多重继承 多态 方法多态 最后 前言 Python是一个功能非常强大的 ...
- python oop __slots__方法
动态语言python 可以在程序运行的情况下给class加上功能.具体为 #引入一个 from types import MethodType #方法 #然后 s.set_age = MethodTy ...
随机推荐
- 第二周、ubuntu的简单介绍与使用
一.复习第一周的大致内容:1.UNIX与Linux.ubuntu系统UNIX是1971年贝尔实验室的肯·汤普逊.丹尼斯·里奇,合作研发一款通过的操作系统,多用户.多任务.安全.稳定,收费.Linux是 ...
- webpack4基础入门操作(二)(讲解下webpack的配置内容)
前序:我之所以开始写这个系列,是因为我最近出去看了下外面的情况,发现技术更新的脚步太快了.我的技术栈已经完全落伍了. 所以准备今年学习写新的东西,而React.webPack4就是我的第一步.前面我看 ...
- Java 的 WebSocket
1. WebSocket 是什么 一言以蔽之,WebSocket允许服务器「主动」给浏览器发消息,如教程演示截图,服务器会主动推送比特币价格给浏览器. 2. 为什么要用 WebSocket 实时获取服 ...
- kibana内存设置
kibana是一个基于NodeJS的单页web应用.而NodeJS则是基于Chrome V8引擎的.V8引擎对于内存的使用是有限制的,默认情况下,64位系统下约为1.4GB,32位系统下约为0.7GB ...
- 用StatSVN统计svn项目中每人代码提交量
用StatSVN统计SVN服务器项目的代码量 下载并安装SVN统计工具StatSVN 1)下载地址:sourceforge.net/projects/statsvn/ 2)解压压缩包,到一个目录,如D ...
- requirejs:模块加载(require)及定义(define)时的路径理解
给新来的实习生普及下JS基本知识,看到比较好的文章 转载https://blog.csdn.net/xuxiaoping1989/article/details/52384778 接触过require ...
- Spring Security Architecture and Implementation(架构和实现)学习笔记
Spring Security 关于spring-security的官网文档学习笔记,主要是第8章 Architecture and Implementation(架构和实现)内容 参考: https ...
- pandas-10 pd.pivot_table()透视表功能
pandas-10 pd.pivot_table()透视表功能 和excel一样,pandas也有一个透视表的功能,具体demo如下: import numpy as np import pandas ...
- pandas-04 多级index操作
pandas-04 多级index操作 在pandas中可以为series和dataframe设置多个index,也就是说可以有多级index和column.这样可以对pandas的操作更加灵活. i ...
- MES选型很困惑?避开这三个禁忌!
MES系统的选型除了要充分剖析自己企业,掌握自己企业的需要.信息化的目标.自身的特点外,还要完全了解MES系统供应商,对其实力.软件性能.服务.用户.软件实施速度.价格进行了解与分析,这也是MES系统 ...