在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++菜鸟,如有描述错误,欢迎大家指正!