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. Web Magic 简介

    WebMagic in Action Little book of WebMagic. WebMagic是我业余开发的一款简单灵活的爬虫框架.基于它你可以很容易的编写一个爬虫. 这本小书以WebMag ...

  2. 一、Html简介

    html什么东西呢? hypertext markup language(超文本标记语言).超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准, 它通过标记符号来标记要显示的网页中 ...

  3. Django简介--Django从入门到精通系列教程

    该系列教程系个人原创,并同步发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  4. easyUI中点击datagrid列标题排序

    easyUI中点击datagrid的排序有两种,一种是本地的,一种是服务器的.本地的只能排序当前页,而服务器的可以对全部页进行排序.这里主要是分享下服务器排序. 1.为datagrid添加属性remo ...

  5. js事件绑定函数

    js中事件绑定方法大致有三种: 1.在DOM元素中绑定 <input onclick="alert('在DOM中绑定')" type="button" v ...

  6. 【转】nagios 命令解释

    nagios 命令解释 check_ssh                 界面拼装参数格式如下共3个元素:                         命令!端口!连接超时时间          ...

  7. C#面向对象方式设置、读取应用配置

    关注点: 1.用面向对象方式的方式(get,set)访问和设置配置项 2.“CallerMemberName”在.net 4以下的变通方式 最后一周了,大伙都进入过年模式了.身还在,心已远.最近事情不 ...

  8. XAML: 自定义控件中事件处理的最佳实践

    在开发 XAML(WPF/UWP) 应用程序中,有时候,我们需要创建自定义控件 (Custom Control) 来满足实际需求.而在自定义控件中,我们一般会用到一些原生的控件(如 Button.Te ...

  9. poj 1423 打表/斯特林公式

    对于n位数的计算,我们可以采用(int)log10(n) + 1的方法得到n的位数 第一种方法: 对于n!位数的计算,log10(n!) = log10(1) + log10(2) + ... + l ...

  10. template.compile()方法

    template.compile(source, options) source:必传,渲染模板的内容. options:可选,通常不传.(其实是我还没研究明白) return:一个渲染函数. 示例如 ...