概述
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面向对象的比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复