在python的面相对象编程中,我们常常在class中可以看到a(),  _b() ,  __c(), __d()__这样的函数。

  由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我在学习c++的过程中,发现c++对应的概念如下:

 (1) 访问限制

  在c++, java中,我们可以看到public, pretected, private这样的访问修饰符:

  a() 对应public,可以通过 实例.a() 这种外部方式使用,也可以在本类和派生类中使用;

  _b() 对应protected, 只能在本类和派生类中使用;

  __c() 对应 private, 只能在本类中使用

(2)__d()__魔术 实现解构/析构与 重载运算符

  在python中,__d()__是python的魔术方法,我们可以利用它解构/析构,与重载运算符,看下面的函数名称你就会明白

方法名

重载说明

运算符调用方式

__init__

构造函数

对象创建: X = Class(args)

__del__

析构函数

X对象收回

__add__/__sub__

加减运算

X+Y, X+=Y/X-Y, X-=Y

__or__

运算符|

X|Y, X|=Y

_repr__/__str__

打印/转换

print(X)、repr(X)/str(X)

__call__

函数调用

X(*args, **kwargs)

__getattr__

属性引用

X.undefined

__setattr__

属性赋值

X.any=value

__delattr__

属性删除

del X.any

__getattribute__

属性获取

X.any

__getitem__

索引运算

X[key],X[i:j]

__setitem__

索引赋值

X[key],X[i:j]=sequence

__delitem__

索引和分片删除

del X[key],del X[i:j]

__len__

长度

len(X)

__bool__

布尔测试

bool(X)

__lt__, __gt__,

__le__, __ge__,

__eq__, __ne__

特定的比较

依次为X<Y,X>Y,X<=Y,X>=Y,

X==Y,X!=Y

注释:(lt: less than, gt: greater than,

le: less equal, ge: greater equal,

eq: equal, ne: not equal

__radd__

右侧加法

other+X

__iadd__

实地(增强的)加法

X+=Y(or else __add__)

__iter__, __next__

迭代

I=iter(X), next()

__contains__

成员关系测试

item in X(X为任何可迭代对象)

__index__

整数值

hex(X), bin(X),  oct(X)

__enter__, __exit__

环境管理器

with obj as var:

__get__, __set__,

__delete__

描述符属性

X.attr, X.attr=value, del X.attr

__new__

创建

在__init__之前创建对象

(3)@staticmethod 装饰器与 静态方法的实现:

  在c++中,我们可以通过static修饰符,来使public下的函数可以通过classname::funcname();的方式访问,而无需实例化。

  对应的@staticmethod 就是干这个的,于是,我们就可以使用classname::funcname()的方式访问,而无需实例化。

  

(4)@classmethod装饰器与@staticmethod的异同

  首先要讲的是,二者使用的相同之处,就是都是通过classname::funcname()的方式访问

  @classmethod 装饰的是类方法,@staticmethod 装饰的是 静态方法。

  @staticmethod 装饰的静态方法,就是单纯的想将一个函数绑在类上,让他继承下去。

  @classmethod 装饰的类方法,传递参数给类,多用于对类的预处理。

  详情请看下面大神教程,不在累述。

  http://python.jobbole.com/81595/

(5)@abc.abstractmethod 装饰器对 抽象类的实现

  我们有时候需要在基定义一个纯虚函数,强制让派生类重新实现一次,我们就可以使用abc包的@abc.abstractmethod 装饰器实现。

  详情请看下面大神教程,不在累述。

  http://python.jobbole.com/81595/

-------------------------------------

小生python, c++菜鸟,如有描述错误,欢迎大家指正!

 

  

python 的面相对象编程--对应c++的更多相关文章

  1. 关于Python的面相对象编程

    Python 其实不是面向对象的语言,更像是C语言的面向过程编程的语言 但 Python 也支持 class 关键字来实现类的声明与创建 但 Python 的对象更像是 JavaScript 的函数 ...

  2. 019 python面相对象编程

    一:self的意思 1.说明 self代表类的实例,而非类. 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self. self 代表的是类的实例 ...

  3. python之面相对象程序设计

    一 面向对象的程序设计的由来 面向对象设计的由来见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 面向对象的程序设计:路飞学院版 ...

  4. python之面相对象进阶

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...

  5. Python 5 面对对象编程

    面向对象编程: 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程 ...

  6. Python 面像对象编程(上)

    一: 对象的概念 "面向对象"的核心是"对象"二字,而对象的精髓在于"整合",什么意思? 所有的程序都是由"数据"与&q ...

  7. 【我要学python】面对对象编程之继承和多态

    class animal(object): def run(): print('animal is running...') class dog(animal): def run(self): pri ...

  8. 面相对象编程 扩充之封装、访问机制、 property

    封装: 封装指的是可以将一堆属性和方法,封装到对象中 ps : 对象就好比一个 “袋子/容器”, 可以存放一堆属性和方法 ps : 存不是目的,目的是为了取,可以通过“对象” d的方式获取属性或方法 ...

  9. PHP面相对象编程-重载、覆盖(重写) 多态、接口

    http://www.ctolib.com/topics-21262.html http://cnn237111.blog.51cto.com/2359144/1284085 http://blog. ...

随机推荐

  1. SqlServer查询某个表的列名称、说明、备注、类型等

    SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说明 = case when a.colorder=1 then isnull ...

  2. SpringBoot Web开发(4) Thymeleaf模板与freemaker

    SpringBoot Web开发(4) Thymeleaf模板与freemaker 一.模板引擎 常用得模板引擎有JSP.Velocity.Freemarker.Thymeleaf SpringBoo ...

  3. Node安装及自定义config

    下载Node.js , Windows下安装一键到底, 没有什么说的. 主要是默认无法流畅使用, 包括流畅下载, 全局缓存之类. 如下是进一步设置, 包括: - 设置淘宝镜像. - 增加Yarn(np ...

  4. Hive环境的安装

    hive是什么:hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能(HQL) hive有什么用 1.通过类SQL语句快速实现简单的Map ...

  5. HTML/CSS基础知识(二)

    Q:HTML5是什么?为什么要用HTML5?有什么新特性?移除了哪些元素? HTML5是HTML的最新版本,2014年10月由万维网联盟(W3C)完成标准制定.目标是替换1999年制定的HTML4.0 ...

  6. cxf+spring+soap简单接口开发

    最近学了cxf框架开发webservice,简单搭了个接口,方便后续翻阅,本人才疏学浅,若有不足,请多多谅解! 一.服务端: 1.所用到的jar包: maven的pom.xml配置: <proj ...

  7. Maven下CXF的wsdl2java生成客户端代码

    <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin< ...

  8. python爬虫之scrapy

    架构概览 本文档介绍了Scrapy架构及其组件之间的交互. 概述 接下来的图表展现了Scrapy的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示). 下面对每个组件都做了简单介绍,并给出了详 ...

  9. windows系统下将nginx作为系统服务启动

    1. 准备工作 下载安装nginx,并记住安装目录 官网下载 下载winsw,下载地址 2. winsw设置 将winsw可执行程序复制到nginx安装目录下,并重命名为nginx-service 新 ...

  10. 使用jQuery+huandlebars循环遍历中使用索引

    兼容ie8(很实用,复制过来,仅供技术参考,更详细内容请看源地址:http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) & ...