编程语言比较——class

编程语言比较——class中的变量属性

1.Java/C#/C++
这三种语言class中的变量属性基本一致,公共部分有static、public、private、protected
其中public、private、protected是用来对象封装的。若未声明,C#、C++则默认是private;java默认是default,即只能在同一个package里访问。

  • public:可通过实例对象在外部进行访问。
  • private:只能在实例对象内部函数之间进行访问,不可在实例对象外部进行调用访问。
  • protected:专门用于修饰可继承访问的属性,在实例对象本身或者子类实例对象中可进行调用访问。

上述三中修饰符的属性都只能通过实例对象生成(在未实例化之前,并没有给这些变量分配内存),进而可以调用。而下面的static关键字则是针对class对象(万物皆对象,class也是对象,每一个类都有一个Class对象,每当编译一个新类就产生一个Class对象,可以通过它创建其他实例对象)本身的。
static的作用:

  • 用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享。
  • 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类。
  • 静态块用法,将多个类成员放在一起初始化,在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
  • 静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。

2.python
python比较特殊,它并没有static、public、private、protected这些关键字。它默认所有的属性都是public的,这与语言的设计思想有关。

python设计者认为可以用最简单的方式定义类,即默认用public属性,所有函数都是实例对象函数;如果有特殊封闭性的需要,可以后面实现变量的只读特性(@property)或者通过命名方式进行改变。
也可以实现类的函数特性(@classmethod),或者是函数的全局访问特性(@staticmethod),比如有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法. 比如更改环境变量或者修改其他类的属性等。
———————————————————————————————————————
java则相反,它没有像python一样的实现特性(装饰器)功能,所以一般java程序员都将属性设为private,因此对每一个需要外部访问的属性都要有存取方法,虽然IDE可以直接自动完成这一功能,但无疑造成了代码冗余,也造成了获取类中关键函数信息的困难。

python中只有在__init__()函数中通过self.方式定义的属性才是实例对象属性,而在class中定义的是类属性。下面以一个class例子说明。

class Test:
	a=0 #类属性
	__c=1 #私有类属性(通过名称改写机制变成_Test__c,有些python程序员不喜欢这种机制)
	def __init(self,data)__:
		self.b=data #实例属性
		self._c=5 #受保护实例属性(约定不能修改以下划线开头的属性)
		#上面的通过下划线命名讲变量私有化的方式,也可通过@property实现只读特性来完成

猜你喜欢

转载自blog.csdn.net/JustKian/article/details/87978248