LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1830|回复: 13

不喜欢python的一个理由

[复制链接]
发表于 2005-4-8 23:16:23 | 显示全部楼层 |阅读模式
不喜欢python的一个理由:
      python是一个很不错语言,自己内建的数据结构丰富,面向对象.现在正看相关介绍的书
      可能是自己受java面向对象的毒害太深有一个特征让我很不喜欢,定义一个类时,类的方法居然强制性的要使用一个叫作self的参数
如:

  1. class myclass:
  2.         def Hellow(self):
  3.                print "Hellow\n"
  4. c = myclass()
  5. c.Hellow()
复制代码

上面的程序可以通过,在定义类方法Hellow(self)时,必须有一个self参数

如果

  1. class myclass:
  2.         def Hellow():
  3.                print "Hellow\n"
  4. c = myclass()
  5. c.Hellow()  # 这一句会出错,提示说参数类型不正确
复制代码

这一个特征,总让人觉得python有些怪怪的,很难接受这一点.不知其他人是否有这样的感觉,请回帖
发表于 2005-4-9 12:53:08 | 显示全部楼层
假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。

这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。

-----------------摘自《简明Python教程》-------------------------------------

这个东西,如果去掉的话,速度会慢一点吧。

而且,如果单独方法跟类中的方法一样格式的话,看起来有点不清晰。

:::::::::::::刚开始学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-9 13:49:44 | 显示全部楼层
什么是"单独方法"
如果

  1. class myclass:
  2.        def hellow():
  3.               print 'Hellow'
  4. #此处是创建了一个实例,其实用new运算更好,因为有删除一个对像用的是del
  5. obj=myclass()
  6. obj.hellow() #此处会出错
  7. myclass.hellow() #同样出错,提示没有这个attribute
复制代码

上面的类的定义中,定义了一个方法hellow(),那么这个方法好像是个死的一样,
永远也无法调用到hellow()这个方法.

而语法是,却不会有任何提示说,hellow这个方法无法执行.这是为什么?  请指点
回复 支持 反对

使用道具 举报

发表于 2005-4-13 15:50:37 | 显示全部楼层
我的一个体会是这和python强制的语句缩进要求类似,可以促使编程者产生统一且良好的编成习惯:这个self会时刻提醒编程者以及程序的阅读者这是一个类方法或类成员变量(类成员变量在被同一个类的类方法引用时也必须加self,这对于不需要显式定义类成员变量的Python来说是个很清晰可以减少很多错误的强制性要求)
回复 支持 反对

使用道具 举报

发表于 2005-4-14 13:34:06 | 显示全部楼层
我记得是在哪里看到过,self是为了传递对象的引用。


  1. class cls:
  2.   v = 10

  3. print cls.v
  4. cls.v += 10
  5. print cls.v
复制代码


这段代码执行下来的结果蛮有意思,试试看。


  1. class cls:
  2.   def fn():
  3.     print "sth."

  4. cls.fn()
复制代码


这段代码执行下来就会报错,说:
TypeError: unbound method fn() must be called with cls instance as first argument (got nothing instead)

不过这也不太能解释为什么非要写上self不可,至少俺不是太明白说。
回复 支持 反对

使用道具 举报

发表于 2005-4-14 19:13:09 | 显示全部楼层
我深得 python 书写方式不习惯,
回复 支持 反对

使用道具 举报

发表于 2005-4-14 19:43:45 | 显示全部楼层
还是 Perl 的 C++ 语法格式看着爽啊
回复 支持 反对

使用道具 举报

发表于 2005-4-23 12:15:22 | 显示全部楼层
深有同感,一开始我也不习惯,不过后来用了一段时间之后就无所谓了。
另外啊,楼主,据我所知 OO 的鼻祖 Smalltalk 在传递对象引用时使用的语法和 Python 是一样的,也是一个 self :-)
回复 支持 反对

使用道具 举报

发表于 2005-4-24 08:17:05 | 显示全部楼层
这更多的是习惯问题,实际上我更不喜欢perl和php中的$,当然你们可以说这是为了区别变量和数据的方式,但是写起程序会多么繁琐。关键是python程序的结构十分清晰,这是我喜欢它的重要原因。
回复 支持 反对

使用道具 举报

发表于 2005-4-26 11:10:28 | 显示全部楼层
Python 的确很OO,就是慢了些,跟JAVA有得一比。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表