- 论坛徽章:
- 0
|
上面我列的只是一部分python的特性,C#也是一种类解释性的语言,不过不是动态的。而你所说C#/java都有,那好我可以举出几个它们没有的(不过C#基本上没有学过,不好比较):
1. Python的面向对象是多重继承,而C#/Java是单根继承。这使得Python更象是C++。因此使用起来更方便。
2. 自省的能力,java就差很多了。
3. 动态类型,即在赋值时根据数据类型自动绑定类型,但它又是强类型。这一点就与java的静态定义不同。
4. 在定义类方法时,不支持重载,与java不同,但支持参数缺省值,和可变参数,这一点java做不到
5. 动态改变实例属性,包括增加减少,还可以修改类的属性。这一点java做不到。
6. 还有许多的语法特点,太多了,举几个简单的例子:
if 2<n<5: 这种表达式java做不了
a, b = 1, 2 多个赋值
a, b = f() 函数可以一次返回多值
[str(i) for i in range(10)] 列表综合的表达
7. 还有象generator, decorator,这样更深入一些的东西java没有
还有许多。而且前面所讲内置的高级数据类型,而java不是内置的。还有python通过特殊的类方法可以实现操作符重载,而java是不支持的。还有象属性(property)定义,可以把读,写方法与一个名字绑定,这样在访问属性时,其实是调用了对应的方法。就象是delphi, vb中的属性一样。
至于讲到给实例动态加属性有许多的用处。比如我可以把它当作一个结构来传送数据,而且我在使用时直接增加属性即可,不用预先定义。因此传送对象非常方便。而且还可以用于对象序列化。先构造一个空对象,然后根据序列化的文件添填属性,最后再根据它的原始类,修改这个对象的基类完成对象的还原。
[ 本帖最后由 limodou 于 2006-8-1 09:58 编辑 ] |
|