我是靠谱客的博主 紧张玫瑰,最近开发中收集的这篇文章主要介绍python与java面向对象的比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

python与java面向对象的比较

这篇文章主要是通过将python中面向对象的一些概念跟我比较熟悉的java进行类比,从而帮助自己更好的学习和理解python。所以以下内容主要以介绍python面向对象特性为主。

关于类的定义

关于类文件命名

在java中规定类文件的名称必须跟文件中唯一的一个public类的类名一样,而在python中没有这个要求,保存python类的文件名与类名没有关系。

python中类的定义

class Animal:
    """动物类"""
    count = 0
    def __init__(self, name, color):
        '''初始化方法'''
        self.__name = name
        self.color = color
        print('create a animal')
    def get_name(self):
        '''获取name属性方法'''
        return self.__name

关于变量

先来看python类中的变量,在Animal类中有三个变量:count、__name和color三个变量,下面分别解释三个变量意义:

count:首先这个变量跟java中就不一样,在java中定义在类中的变量如果不加static修饰,一般就是指成员变量,每个对象都会保存有自己的一份成员变量。而在python中这个count是叫做类变量,他不是属于对象的而是属于类的,该类的所有实例对象拥有同一个count变量,对应与java中所说的静态属性。可以使用类名.属性名或者实例名.属性名调用,一般推荐前者方式来调用。

__name、color:这两个变量是属于同一种。叫做实例变量或者成员变量,对应到java中就是成员变量,他是属于对象的,每个实例对象都拥有自己的成员变量。使用实例名.属性名访问。需要注意的是,与在java中不同,python类中的成员变量不需要在方法前面事先定义,而是直接在__init__方法中定义就可以了。而且在实例化一个对象后还可以动态的给这个对象增加成员变量,例如:

a = Animal('dog', 'black')
a.age = 2
print(a.age)

在创建完一个对象a后,居然还可以再给a增加一个age属性并赋值为2。

关于python中的访问权限修饰符:

在java中有default、private、protected、public这几种权限修饰符来控制类中属性的访问权限。在python中没有访问权限控制符,而是通过属性名来控制。例如Animal类中的color属性,就相当于是java中的public的属性,在类外部可以通过a.color直接访问。如果想要实现java中的private,让在类的外部不能访问属性,那可以把属性名前面加上两个下划线__。例如Animal类中的__name属性,就是一个私有属性,不能在外部通过a.__name直接访问,必须通过get或者set方法来访问。

从内部机制原理讲,外部不能直接访问__name是因为Python解释器把__name这个变量名改写成了_Animal__name,所以当你直接使用a.__name时,会报错,提醒你这个属性不存在,其实是因为他的名字被改写了。但是,你仍然可以通过a._Animal__name这个名字来访问__name属性。但是强烈不建议这么做。

也就是说,Python本身没有任何机制来阻止你直接访问私有变量,他的这些权限控制机制都是假的。

另外在python中还有一些类似于__XXX__的变量名,前后都有双下划线,这种变量不是私有变量,是可以直接访问的,这种变量叫做特殊变量,他们是Python中具有特殊意义成员和方法,所以在写自定义属性或者方法时,尽量不要去这种名字。

还有一种属性名,是以一个下划线开头的_XXX,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

关于方法

实例方法、静态方法、类方法,与java一样都是属于类,这三种方法的主要区别在于方法参数和调用方式不同

方法的访问权限跟成员变量类似,通过方法名进行判断。

最后

以上就是紧张玫瑰为你收集整理的python与java面向对象的比较的全部内容,希望文章能够帮你解决python与java面向对象的比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部