Python面向对象编程(OOP)

一、面向对象过程的优点特征:

封装

 模型的特征和能力打包在一起
模型的改变由模型自身完成
隐藏模型的细节,外界只能使用,不能改变

继承

 符合自然界分类规律
快速实现代码重用
符合现实世界中事物的特征

多态

 子类可以继承父类的特征与能力
还可以通过自定义来修改其特征与能力
鸭子模型:
只要具有使用者的属性或能力便可以使用
|==>其他语言需要通过接口来实现
不同类,相同方法
相同类,不同方法

组合

 一个模型可以由其他模型组成

二、类的具体实现和特征

1、类的定义

 class TextClass:
pass

在python3中默认继承object父类

#python2默认为经典类,显式引用object类为新式类

#python3默认为新式类,不用显式引用object类

!!!!!

经典类继承为深度优先

新式类继承为广度优先

2、类的特征,能力,描述

【1】能力==>体现在方法上,类具有能动性

【2】特征属性,是具有自身包含或知道的模型

3、类的实例化

 前面定义了TestClass类
接下来实例化
A=TestClass()

【1】与类的关系:定义类就是建立模型(就像是印章,模子)

实例就是产生真实的模型产品(产品)

【2】实例化步骤

(1)‘__new__()'方法创建实例

自动从object继承

(2)’__init__()'方法初始化实例

若是定义了,则从定义的'__init__'开始使用定义了的(就是方法的重载)

若是没有定义,则使用继承自object类的‘__init__'方法

4、添加类的说明

在类名的下一行用三引号标出

“”“
docstring
”“”

这就是类的说明文档

类的文档查看:

>>>help(A)

#A为要查看的类名

>>>A.__doc__

5、类的特征描述

【1】实例属性

类被实例化才具有的属性

一般在'__init__'()方法中创立并实例化

直接使用即定义:self.<属性名>

<1>在类内定义属性(定义类的时候)

<2>在类外定义属性(在实例化以后)

!注意:相同类的不同实例具有不同的属性值

备注:一般不建议在__init__()方法外定义,创建和初始化实例,

一般不推荐类外定义和修改,修改可以单独定义方法

【2】类属性

类属性使得相同类的不同实例具有相同的变量

>>引用方法:类名.属性

【3】类的私有属性

‘__'开头的变量名加以标志,只有类对象自己能访问。(内部实现时会自动改变变量名)

’__init__()'    初始化类的方法            ’__doc__'    类的说明文档

‘__dict__'    实例属性和值                 ’__module__'     类所在的模块

‘__base__'  父类

【4】深入类的属性

同名的类属性与实例属性,

1)以<类名>.属性名   引用时只能引用类属性

2)以<实例名>.属性名   引用时只能引用实例属性

 In [54]: class text:
...: a=4
...: def __init__(self,b=4):
...: self.b=b
...: In [55]: c=text() In [56]: c.a
Out[56]: 4 In [57]: c.b
Out[57]: 4 In [58]: text.a
Out[58]: 4 In [59]: text.b
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-59-cc1e79bff36f> in <module>()
----> 1 text.b AttributeError: type object 'text' has no attribute 'b'

【5】属性访问的特殊方法(反射)

工具函数:1)hasatter(obj_name,"属性名")      测试是否具有类的属性

2)setattr(obj_name,"属性名")       设置属性

3)getattr(obj_name,"属性名"            取属性

【6】属性的包装

将方法包装成属性,以隐藏相关实现:1)控制属性的类型和范围   2)虚拟属性由其他属性处理后得来

三种属性包装操作:

1)@property                 可读

2)@<property-name>.setter   可写

3)@<property-name>.delter    可删

下两个必须有第一个包装

包装产生虚拟包装

【7】描述符

用来拦截和控制属性访问并可以重复使用

将实现特殊协议方法额类

 协议方法:
__get__( )
__set__( )
__delete__( )
分类:
数据描述符(实现全部协的名法了
非数据描述符( 实现部各十协议方法)
说明: 所有关成员正数都是非海据描达符
描述符必须作为另一个类的类属性, 同名的实创剧性和非数推描述条(以方法为例
优先级
def pr():
print('..............')
>>>t.pr=10
>>>t.pr
>>>10
>>>del t.pr
>>>t.pr 注意,只能在新成类中使用
_call__()让类的实例如函数一样可调用
类的继承与重载
继承的特点:
减少代码和灵话定到新类
子类具有父类的属性和方法
子类不能细继承父类的手有剧性3 法
子类可以添加后的方说
子类可以修改又类的乡法

6、类的方法

【1】类方法定义

类似面向过程中的函数定义方法

第一个参数总是self

 def  Foo(self,a):
self.a=a
print(self.a)

【2】类方法的调用

<1>类的内部调用:self.<方法名>(参数列表)

<2>类的外部调用:<实例名>.<方法名>(参数列表)

【3】构造方法    ’__init__()'      初始化实例

实例化步骤:1、‘__new__()' 定义新的实例      2、’__init__' 初始化实例

>>>>>>>>>>>>>>未完待续2018-03-04<<<<<<<<<<<<<<<

>>>>>>>>>>>>> 更新2018-03-08<<<<<<<<<<<<<<<<<<<<

【4】类的特殊方法

类也是一个对象,但是具有创建其自身实例的能力

类可以把它作为函数的参数传送

【5】元类:类的创建和管理者

所有的类都是元类(type)的实例

>>>Test = type("Test",(),{'age':13,'name':"wangbo"})

【6】自定义元类

目的:对其创造的类进行预处理

继承type类

步骤:1)定义‘__init__'方法

在使用自定义元类的时候:__metaclass__ =Myclass  #指定元类

所有定义的为Myclass元类的子类

【7】类的特殊方法

构造序列:

__len__      __getitem__(self,key)                  __setitem__(self,key,value)          __delitem__(self,key)

构造迭代器

__iter__(self)   定义迭代方式                 __next__(self)

python语言基础语法笔记<note2--面向对象编程>的更多相关文章

  1. python语言基础语法笔记<note1库安装和工具安装>

    Python是一门入门简单的编程语言,它的安装和搭建也非常简单.在大部分的发行Linux版本上都预装了python2,部分也预装了python3,需要查看Linux上是否安装Python,只需要在 命 ...

  2. Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别

    Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...

  3. Go语言基础之结构体(面向对象编程上)

    1 自定义类型和类型别名 1.1 自定义类型 Go语言中可以基于一些基本的数据类型,使用type关键字定义自定义类型的数据 . 自定义类型定义了一个全新的类型,该新类型具有基本数据类型的特性.自定义类 ...

  4. Go语言--基础语法笔记

    ### 换了工作,好久没有添加新文章了,本来是想更新到github上的,想想还是在博客里放着,感觉以前的文章都没有很仔细,都只是问题处理的记录, 以后想新加一些整理的笔记也好 ### 主要内容 2.1 ...

  5. 学习Python语言 基础语法:变量的基本使用

    Python变量 程序是用来处理数据的,变量就是用来保存数据的,通过给数据定义一个名称来保证方便记忆和识别.使用这个数据.变量可以保存所有类型的数据. Python变量的定义 在Python中,变量的 ...

  6. Python:笔记(3)——面向对象编程

    Python:笔记(3)——面向对象编程 类和面向对象编程 1.类的创建 说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加. 2.构造函数 构造函数的功能毋庸置疑, ...

  7. python【第六篇】面向对象编程

    面向对象编程 一.编程范式:编程的方法论.程序员编程的“套路”及“特点”特点总结,抽象成方法.规范. 二.面向对象编程介绍: 1.描述 世界万物,皆可分类:世间万物,皆为对象:只要是对象,就肯定属于某 ...

  8. GO语言的进阶之路-面向对象编程

    GO语言的进阶之路-面向对象编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当你看完这篇文章之时,我可以说你的Golang算是入门了,何为入门?就是你去看Docker 源码能看 ...

  9. Python 语言基础

    Python 语言基础 Python 开发环境 计算机组成 编程语言(计算机语言)是人们为了控制计算机,而设计的一种符号和文字的组合,从而实现向计算机发出指令. 形式是符号和文字的组合 目的是为了控制 ...

随机推荐

  1. 用powershell实现:“倩女幽魂姥姥”版《语音报警系统》

    ------[第一章 前言]------ win7,及以上版本中,是自带语音库的,系统自带一套女声中文库,一套女声英文库.用powershell调用,从而发音,制作报警系统.是一件太简单的事情,只需要 ...

  2. Mysql之左连接右连接内连接——示例 (转)

    下面是两张表 表stu 表tech 1.右连接 当使用右连接语句查询时,返回结果如下: 1 SELECT stu.id,stu.name,stu.classe_name,tech.id,tech.na ...

  3. python 爬虫入门----案例爬取上海租房图片

    前言 对于一个net开发这爬虫真真的以前没有写过.这段时间学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. ...

  4. AM解调的FPGA实现

    一.说明: 功能:AM解调 平台:Vivado 2016.4 和 Matlab R2017a 二.原理: 1.AM解调原理 模拟电路中采用"包络检波"的方法: 数字电路中采用类似的 ...

  5. 基础知识全面LINUX

    学习Linux系统的重要性应该不用多说,下面我就对Linux的基础知识进行一个全面而又简单的总结.不过建议大家还是装个Linux系统多练习,平时最好只在Linux环境下编程,这样会大有提高. linu ...

  6. Java使用Openoffice将word、ppt转换为PDF

    最近项目中要实现WORD的文件预览功能,我们可以通过将WORD转换成PDF或者HTML,然后通过浏览器预览. OpenOffice OpenOffice.org 是一套跨平台的办公室软件套件,能在 W ...

  7. pandas教程

    对pandas做最简单的介绍,针对初学者. 一.引入相关模块模块 import numpy as np import pandas as pd import matplotlib.pyplot as ...

  8. 洛谷 [P1387] 最大正方形

    本题非常有趣. (n^6) 枚举四个端点,每次遍历矩阵求解. (n^4) 先处理前缀和,枚举四个端点,每次比较前缀和和正方形面积. (n^3) 枚举左上方端点,在枚举边长,前缀和优化 (n^2logn ...

  9. 3167: [Heoi2013]Sao [树形DP]

    3167: [Heoi2013]Sao 题意: n个点的"有向"树,求拓扑排序方案数 Welcome to Sword Art Online!!! 一开始想错了...没有考虑一个点 ...

  10. bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]

    1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...