java的this static public protected private abstract interface 在python的对应,java python一些区别
1、因为工作的原因,最近使用了三个多月的java作为主力语言。很早之前在菜鸟教程也看过java文档两遍,但实践少,处于能看懂写出来不流畅的状态(对于java必须要略懂,不能能看到就头疼跳过,因为现在百度随便搜个解决方案,大部分是java的文章,如果不能看懂,就没办法把它翻译成自己的python来实现了)。后来花大精力专门学习python的oop和设计模式,再来使用java,就更流畅了,主要注重掌握一些思想,遇到具体的解决问题方案,可以百度复制现成的东西来用很方便,java的网上文章比python多得多的多。通过使用java后,反过来对python程序编写也有一些帮助和影响。
以下是python和java的一些对比。
java的static属性 ---> py的类属性
java的static方法 ---> py的类方法 py需要加入@classmethd, staticmehod和classmethod都差不多,在classmethod中访问A的类属性用cls.xx ,staticmethod中一般不访问类属性才使用staticmethod,如果staticmethod方法还非要用类属性可以用A.xx。
java的public方法 --> py的 func()
java的protected方法 --> py的 _func()
java的private方法 ---> py的 __func()
java的abstract抽象类 抽象方法 ---> from abc import ABCMeta, abstractmethod
__metaclass__ = ABCMeta
@abstractmethod
def _getBaiduHeaders(self):pass
java的interface ---> py没有,py用鸭子类, 要想规范 ,需要使用 zope.interface包。
java的this ---> py的self,但有点不同的是 ,表示实例属性/方法时候python必须写self,java在少数情况下才必须用this,所以python代码中的self明显比java的this出现多的多,java中除了声明为static属性/方法的是属于类属性/方法,没被static修饰的属性都是默认带this的实例属/方法。
java的变量和方法会有很多前缀,我的一些只学python朋友,非常的排斥java,觉得加这么多前缀太罗嗦了,但这样好处是所有意图都是显式的,人人都注重这些用途,想无视都没办法。py是隐式的,如果一意孤行不学习优秀的写法长期埋头自己搞自己的,会出一些问题,看见一个笨瓜写的python所有类的代码就是全部都是公有实例方法,这样造成理解和ide补全都很差劲。其实python也有静态方法/属性 公有、私有、保护这些概念的,比较隐式。如果不理解java什么时候加static、 final 、private、protected、public那写python也会很糊涂,造成写的python类里面全都都是公有实例方法和属性。
2、另外关于python java整体的区别,我的一些感受是:
1、java更易理解,所有变量声明都有类型,python的如果自定义类的对象时由函数深层次返回的,返回对象的函数中如果没有写注释rtype,需要一级一级的去找,才能确定对象的类型。另外就是,如果变量命名不规范,阅读时候难以看清楚类型,比如有人喜欢把变量命名为xx_json,但让它表示的却是一个字典,初看起来会造成误会。
2、java性能好一些,只要是静态语言都比动态语言性能好,这不用说了。
3、java强制oop,团队风格会比较统一,团队写的东西复用性更强。py的风格比较自由一些,团队协作起来比java差一些。
4、java比python的有些地方复杂一些,比如简单的读写文件比python的步骤和代码多多了。但复杂业务,注重的解决流程,其实都还差不多,python也节约不了太多的思考。
5、idea对java的支持比pycahrm对py的支持更加完美,由于是动态语言很灵活,对于python,ide也没办法完全知道我们的想法和意图。
6、java有编译过程,低级错误会直接报错,不会等到程序运行到那一行才会报错,节约了很多时间。python没有编译过程,运行时确定,如果项目太长很耗时,发现一些很明显的低级错误就要花更长的时间了。好在python在pycahrm中可以使用inspectcode功能来进行静态检查,可以提前发现一些错误,但与java的编译来检查错误,还是有差距。
7、java一切以类为基本单元,最简单的打印helloworld都需要写类,有时候对某个问题只需要做个简单的测试验证,java起手式太多,没有python便捷。
3、总体java比python好,话不能说的太死太绝对留下把柄,所以结论是 二者各有优点。
java的this static public protected private abstract interface 在python的对应,java python一些区别的更多相关文章
- JAVA修饰符类型(public,protected,private,friendly)
转自:http://www.cnblogs.com/webapplee/p/3771708.html JAVA修饰符类型(public,protected,private,friendly) publ ...
- JAVA类型修饰符(public,protected,private,friendly)
JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...
- [学习笔记]Java的public,protected,private,缺省的作用域
0.引言 Java的访问指示符public,protected,private,缺省可以用来修饰类和方法. 1.作用域如下 具体如下: 作用域 当前类 同一package 子孙类 ...
- Java学习笔记(4)----Public,Protected,Package,Private修饰符可见性
Java修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的任何类均可以访问:protected的类.类属变量及方法,包内的 ...
- C++中public,protected,private派生类继承问题和访问权限问题
C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...
- 【转载】C++中public,protected,private访问
第一:private, public, protected 访问标号的访问范围. 假如我们约定: 类内部-----指的是当前类类型的定义中,以及其成员函数的声明和定义中: 类外部-----指的是不在当 ...
- php public protected private属性实例详解
php 类中函数和类变量都有三个属性:public protected private,具体什么时候使用什么属性好纠结,特意找了个实例,这样看起来更清晰. public 表示全局,类内部外部子类都可以 ...
- C++ 类访问控制(public/protected/private)
第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问. 不能被任何其他访问,该类的对象也不能访问. protec ...
- 【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意
大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...
随机推荐
- Volatile和Transient
Volatile: Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看 ...
- es 加磁盘扩容
elasticsearch多磁盘扩容 1.问题 由于早前elasticsearch集群数据存储路径只配置了一个,所以某天磁盘突然爆满,集群差点当机.需重新配置多路径存储路径,因为在生产环境,得保证 ...
- java对mongoDB的基本操作 ,游标使用
package com.mongodb.text; import java.net.UnknownHostException; import java.util.List; import org.bs ...
- Redis 实现消息队列 MQ
Redis 2.4版本之后就内置队列的功能了,如果是日常比较简单的队列应用,可以选择Redis , 效率还很高的!! Redis 还能实现 有序 和 无序 两种队列(只讨论生产者和消费者这种模式的队列 ...
- 微信小程序——极点日历使用方法
极点日历github项目地址 添加至自己的小程序方法 极点日历属性接口文档 代码实例: xml: <calendar calendar-style="calendar" he ...
- 命令行模式启动VMWare虚拟机
工作中使用到在centos中安装vmware Workstation部署虚拟机,以前都是使用图形界面启动虚拟机,由此要调整VNC的分辨率大小,重启VNC Server后所有虚拟机都关闭了.事后分析可能 ...
- c语言for循环等语句详解
循环结构有: . goto语句和if语句构成循环 .while语句 .do-while语句 .for语句 goto语句 goto语句是一种无条件转移语句, 与Basic中的goto语句相似.goto语 ...
- Wifi 评分机制分析
从android N开始,引入了wifi评分机制,选择wifi的时候会通过评分来选择. android O源码 frameworks\opt\net\wifi\service\java\com\and ...
- 嵌入式开发值zynq---zynq中tlv320aic23b spi的驱动移植
http://blog.csdn.net/djason43/article/details/52876742 http://blog.csdn.net/lxmky/article/details/68 ...
- firefox插件-HackBar介绍与试用
This toolbar will help you in testing sql injections, XSS holes and site security. It is NOT a tool ...