python 的面相对象编程--对应c++
在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++的更多相关文章
- 关于Python的面相对象编程
Python 其实不是面向对象的语言,更像是C语言的面向过程编程的语言 但 Python 也支持 class 关键字来实现类的声明与创建 但 Python 的对象更像是 JavaScript 的函数 ...
- 019 python面相对象编程
一:self的意思 1.说明 self代表类的实例,而非类. 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self. self 代表的是类的实例 ...
- python之面相对象程序设计
一 面向对象的程序设计的由来 面向对象设计的由来见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 面向对象的程序设计:路飞学院版 ...
- python之面相对象进阶
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...
- Python 5 面对对象编程
面向对象编程: 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程 ...
- Python 面像对象编程(上)
一: 对象的概念 "面向对象"的核心是"对象"二字,而对象的精髓在于"整合",什么意思? 所有的程序都是由"数据"与&q ...
- 【我要学python】面对对象编程之继承和多态
class animal(object): def run(): print('animal is running...') class dog(animal): def run(self): pri ...
- 面相对象编程 扩充之封装、访问机制、 property
封装: 封装指的是可以将一堆属性和方法,封装到对象中 ps : 对象就好比一个 “袋子/容器”, 可以存放一堆属性和方法 ps : 存不是目的,目的是为了取,可以通过“对象” d的方式获取属性或方法 ...
- PHP面相对象编程-重载、覆盖(重写) 多态、接口
http://www.ctolib.com/topics-21262.html http://cnn237111.blog.51cto.com/2359144/1284085 http://blog. ...
随机推荐
- buffers和cached的区别
原文:https://www.cnblogs.com/kevingrace/p/5991604.html buffers和cached解释 ============================== ...
- python3学习笔记四(列表1)
参考http://www.runoob.com/python3/python3-list.html 序列 python包含6种内建的序列:列表,元组,字符串,Unicode字符串,buffer对象和x ...
- 第二次作业——分布式版本控制系统Git的安装与使用
作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 远程仓库地址是:https://github.com/sheep ...
- Scrapy学习篇(九)之文件与图片下载
Media Pipeline Scrapy为下载item中包含的文件(比如在爬取到产品时,同时也想保存对应的图片)提供了一个可重用的 item pipelines . 这些pipeline有些共同的方 ...
- 并发之java.util.concurrent.atomic原子操作类包
15.JDK1.8的Java.util.concurrent.atomic包小结 14.Java中Atomic包的原理和分析 13.java.util.concurrent.atomic原子操作类包 ...
- 石板地面 Base Shape
软件:Substance Designer 2017.1.2 石板地面 Base Shape 效果见图一 图一:Base Shape (2D View) 首先使用Cells 1(Pattern)结点生 ...
- tfs项目管理
同一个地址下有多个项目,但同一个文件只能映射一次.有两种方式: 1.只添加一次映射,即只给根目录添加映射,如下图,这样西面的具体的项目就不需要挨个添加了. . 2.每个项目挨个添加映射,使用这种方式要 ...
- SQL Server 2012无法连接到WMI提供程序
这篇文章主要介绍了SQL Server 2012无法连接到WMI提供程序(Cannot connect to WMI provider)解决方案,需要的朋友可以参考下 今天一位同事在启动自己工作机的S ...
- Linux 查看各文件夹大小命令du -h --max-depth=1
du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-de ...
- lambda表达式,filter,map,reduce,curry,打包与解包和
当然是函数式那一套黑魔法啦,且听我细细道来. lambda表达式 也就是匿名函数. 用法:lambda 参数列表 : 返回值 例: +1函数 f=lambda x:x+1 max函数(条件语句的写法如 ...