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 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...
随机推荐
- PCL点云特征描述与提取(4)
如何从一个深度图像(range image)中提取NARF特征 代码解析narf_feature_extraction.cpp #include <iostream> #include & ...
- sourcetree向github推送代码提示密码错误
明明用户名和密码都是正确,sourceTree却在推送代码的时候提示无效的用户名或密码. 1.设置 2.选中并编辑 3.如果你本来选择的就是 GitHub,或者选择完以后还是不行的话,在 URL / ...
- XmlnsDefinition for a Cool Namespace Mapping
In XAML, when you want to reference a CLR type, you have to add a namespace mapping that maps the XM ...
- 第三百四十节,Python分布式爬虫打造搜索引擎Scrapy精讲—css选择器
第三百四十节,Python分布式爬虫打造搜索引擎Scrapy精讲—css选择器 css选择器 1. 2. 3. ::attr()获取元素属性,css选择器 ::text获取标签文本 举例: extr ...
- TPshop下载安装
一. 首先 修改 C:\Windows\System32\drivers\etc\hosts 文件 加一行 127.0.0.1 www.tpshop.com // 这里可以改成你想要的域名 二. 修改 ...
- Python——errno
该模块实现标准的 errno 系统符号,每一个对应于一个整数,名称和描述借鉴了 linux/include/errno.h. errno.errorcode 包含从 errno 到底层系统中错误名称 ...
- MySql:charset和collation的设置
From: http://www.2cto.com/database/201302/189920.html MySql:charset和collation的设置 charset 和 collati ...
- JAVABEAN必须继承序列化借口的作用
这里有人家对序列化的测试 http://www.javaeye.com/topic/350137 Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成 ...
- Mac或者linux下登陆到linux上的SFTP
登陆 sftp -i 密钥路径 用户@ip ➜ ~ sftp -i Desktop/aliyun.pem root@39.106.30.1 Connected to 39.106.30.1 上 ...
- php 获取某文件内容
获取某文件下 的文件夹和文件 public function dirRead($dir=''){ //$dir = './upload/images'; $result = ''; if (is_di ...