`
liano
  • 浏览: 25956 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

python vs ruby

阅读更多
1.python是弱对象语言, 而ruby是纯对象语言
python可以没有对象运行,但是ruby的根基就是Object。
而且python对于封装的约束比较弱,而ruby相对较强。
比如一个class的实例dog。
python:dog.name = "dogy" 相当于给dog赋予了一个属性
ruby: dog.name = "dogy" 报错,dog没有name属性。

2.继承的实现不同
python的结构就是一个dictionary, 不论是class还是function,只要不是基本数据类型,内部的就够都是key,value形成的字典结构。函数是数据,也是函数。
比如:
class Dog():
    name = "didi"
    def spark(self):
       print "i am a dog"

Dog.name 和 Dog.spark 都是数据,一个是字符串,一个是unbunded method。
如果在spark后加上(),就是call spark方法。
用dir(Dog)可以看到它的字典里有什么。

对于function也是一样的。 这和javascript很像。

class Cat(Dog):
pass

Cat继承了Dog内部整个的dict,Dog有的东西,Cat全有。

而ruby就不一样了

ruby根基就是Object。
Object中包括了属性,对象方法和实例方法。
这些东西都是区别对待的,而不是一股脑的都放到dict中去。
class不能直接调用实例方法,只能调用自己的方法(又称为静态方法)
而继承的时候,也只有实例方法被子类继承,父类自己的方法不被继承。


3.class 和module

python 和ruby中的module都是可以定义类和function。
但是ruby module可以被class include 进去,把function mixin进去。而python的module不能。
ruby的module也有instance method 和object method之分。

4.ruby是单继承, python是多继承
但是ruby的mixin功能实际上提供了多继承的实现。

5. python和ruby的metaprogramming也有一些不同

ruby对于class 的重复定义的处理是叠加,而python而是后定义的class冲掉前面的同名class。

而对于function的操作比较类似,可以定义新的function,和修改现有的function,从而实现AOP。

python aop 实现:
# usually , decrator is the tools to modify existing method
def trace(function):
def new(self, *tuple, **dict):
print "called here"
function(self)
return new


class Dog():
@trace
def spark(self):
print " I  am qiang qiang! "


#actually, decrator is just a nice way to modify function.
#bwlow is the more understandable way to do it.

class Dog():
def spark(self):
print " I  am qiang qiang! "
spark = trace(spark)

Dog().spark()
# or
# Dog.spark(Dog(), (), a = "a")

ruby AOP实现
require 'permission_filter'

class Dog
  attr_accessor :errors
 
  def spark word
    return word
  end
 
  def validate_spark word
    if word.size > 6
      return "length too lone"
    end
  end
end

class Dog
  include PermissionFilter
  check_permission_of :spark, :validator => "validate_spark"
end

module PermissionFilter
  def self.included base
    base.extend PermissionMethods
  end
end

module PermissionMethods
  def check_permission_of action, args = {}
    validator = args[:validator]
    old_action = "old" + action.to_s
    alias_method old_action.to_sym, action.to_sym
    self.class_eval %Q{
      def #{action} *args
        error = self.send("#{validator}".to_sym, *args)
        if error.nil?
          self.send("#{old_action}".to_sym, *args)
        else
          self.errors ||= []
          self.errors << error
        end
      end
    }
  end
end

#通过alias_method或者define_method来实现。

5.ruby的module和文件的名字没有关系.而python的module就是文件的名字(python2.5),folder就是package,还要求每一个pakcage下面要有一个__init__文件告诉python这是一个pakcage。


结论:ruby比python更加优雅,并且提供了不逊色于python的灵活性。
而python非常灵活,但是从OO的角度讲,灵活的有点过了。这些不能怪她,人家本来就不是纯OO的语言。应该说是纯module的语言。因为就算直接定义了一个方法, 该方法也是在__main__这个module中运行的。biult_in 方法存在于__biult-in__module中。
分享到:
评论
7 楼 peacock 2009-04-17  
python好是好,就是语法很别扭,有点像vb
6 楼 ychael 2009-04-15  
ruby在理想的世界是理想的
python在现实的世界是理想的
5 楼 mulder 2009-04-15  
以前曾经翻译过一篇guido 的访谈,可以看看

http://blog.csdn.net/koalant/archive/2007/05/10/1602982.aspx

引用

Guido: ruby 和 python 的不同在于, 在 ruby 中,你总是在类中定义函数,如果你不明确指出函数属于哪个类,那么你可能在一个默认的类中定义函数,在 python 中,所有的数据对象都是类,但你可以在类以外定义函数,比如 module (模块),作为函数的名字空间,函数是对象,模块是对象,但是它们并不像类那样工作。 这么实现跟 ruby 只是不同的选择而已


实际上 guido 这段说的也不全对, ruby 也可以在 module 定义函数,不一定非在类中定义。
4 楼 bohemia 2009-04-15  
这样的比较意思不大.
不多说了.
1.python是弱对象语言, 而ruby是纯对象语言
这个为什么?
Python中,一切皆对象; 大道至简.
3 楼 liano 2009-03-05  
lmj 写道
看到第一点就有问题
ruby 在对象外部只能通过方法与对象通信
dog.name="dogy"你看起来像是属性,其实是调用方法name=("dogy"


我的意思是,python的class,class实例,module和function内部都有自己的dict结构,可以在对象的外部给对象添加属性,就像dog.name='dogy'.
而ruby不能直接在外部修改对象的iv_table.
2 楼 lmj 2009-03-05  
看到第一点就有问题
ruby 在对象外部只能通过方法与对象通信
dog.name="dogy"你看起来像是属性,其实是调用方法name=("dogy"
1 楼 fangy 2009-03-05  
python可以说是动态的强类型语言

相关推荐

    Eric is a full featured Python and Ruby editor and IDE,

    Eric is a full featured Python and Ruby editor and IDE, written in python. It is based on the cross platform Qt gui toolkit, integrating the highly flexible Scintilla editor control. It is designed to...

    为什么你一定要学习Python或Ruby语言.pdf

    Python和Ruby是两种强大的、高效且易学的编程语言,它们在现代软件开发中扮演着重要的角色。本文将探讨为什么学习Python或Ruby对于程序员来说是必要的,并与一些常见的编程语言进行对比。 首先,Python和Ruby相比C/...

    Python & Ruby 学习

    标题中的“Python & Ruby 学习”表明了这个压缩包文件包含了与这两种编程语言学习相关的资源。Python 和 Ruby 都是流行的高级编程语言,广泛应用于Web开发、数据分析、自动化脚本等多个领域。以下是对这两个语言的...

    Python、Ruby游戏设计参考图书

    根据给定的信息,“Python、Ruby游戏设计参考图书”是一本详细介绍如何使用Python和Ruby这两种脚本语言进行游戏设计与开发的书籍。本书不仅涵盖了游戏设计的基本原理,还深入探讨了如何利用这两种流行的编程语言来...

    Python安装包和安装教程.pdf

    Python vs Ruby 1. 问题解决方式:Python 和 Ruby 都是面向对象的语言,都是动态和灵活的,但它们解决问题的方式不同。 2. 框架支持:Python 的 Django 极其相似于 Ruby 的 Ruby-on-Rails,都是高效的框架。 3. ...

    使用Python Lua和Ruby语言进行游戏编程

    在本主题中,我们将探讨三种语言——Python、Lua和Ruby在游戏开发中的应用。 首先,Python以其简洁易读的语法和丰富的库支持而闻名,使其成为初学者和专业人士的理想选择。在游戏编程中,Python可以用于创建游戏...

    Python和Ruby比较优缺点共1页.pdf.zip

    Python和Ruby都是高级编程语言,它们在Web开发、脚本编写、数据分析等领域有着广泛的应用。这份资料《Python和Ruby比较优缺点共1页.pdf》可能是对这两种语言在特性、性能、社区支持、学习曲线等方面的对比分析。虽然...

    PHP、Python、Ruby的(数据库、文件)比较(原创)

    在文件操作方面,三者都能满足基本需求,但Python和Ruby的语法通常被认为更易读,Python的os模块和Ruby的File类提供了高度封装的操作。PHP虽然可能需要更多的代码来实现相同功能,但在某些特定场景下,其文件处理...

    每个程序员都应该学习使用Python或Ruby

    尽管C、C++、Java等经典编程语言依然是主流,但Python和Ruby因其简洁、易学、开发效率高等特点,在业界受到了越来越多的关注。本文将探讨为何Python和Ruby对程序员如此重要,以及它们与其他编程语言相比的优势所在。...

    python-ruby-golang:比较python,ruby和golang

    python-ruby-golang click(Python),thor(Ruby)和cli.go(Golang)的比较,用于构建非常简单的命令行工具。 快速开始 有关更多信息,请参见每个子目录中的README.md。 博客文章

    python和ruby,我选谁?

    ### Python与Ruby:异同与选择 #### 引言 在选择编程语言的过程中,开发者往往会根据项目的具体需求和个人偏好来做出决策。对于那些在Python和Ruby之间徘徊的开发者而言,了解这两种语言之间的区别和相似之处至关...

    matlab_ 红黑树二分搜索法示例,用于比较C++、Java、Python、Ruby和MATLAB代码

    C++、Java、Python、Ruby和MATLAB OOP实例比较 红黑树二分搜索法示例,用于比较C++、Java、Python、Ruby和MATLAB代码 Comparison of C++, Java, Python, Ruby and MATLAB OOP Example RedBlack Tree Binary Search...

    python2ruby:在 Python 和 Ruby 之间转换的一种真正的hacky方式

    标题中的"python2ruby"项目揭示了一个尝试在Python和Ruby之间进行代码转换的实验性解决方案。这个项目可能是一个早期的尝试,旨在帮助开发者在两种语言间快速预览和理解代码结构,尽管它被作者称为“hacky”和“非常...

    python-ruby:我应该学习Python还是Ruby?

    我应该学习Python还是Ruby? 乍一看,Python和Ruby似乎是非常相似的语言。 两者都是用于快速开发的高级语言。 两种语言都是优美的语言,如果编写得当,它们会很直观,并且读起来很像英语。 动态是什么意思? 好吧...

    用Python,Lua和Ruby语言设计游戏

    标题提到的"用Python, Lua 和 Ruby语言设计游戏",这三种动态语言各自拥有独特的优点,适用于不同的游戏开发场景。接下来,我们将深入探讨每种语言在游戏开发中的应用、特点以及它们如何协同工作。 **Lua** Lua 是...

    用Python,Lua和Ruby语言设计游戏-Game.Programming.with.Python.Lua.And.Ruby.

    在游戏开发领域,Python、Lua和Ruby这三种脚本语言因其简洁、高效和易学习的特点,逐渐成为开发者们的首选工具。《用Python,Lua和Ruby语言设计游戏-Game.Programming.with.Python.Lua.And.Ruby》这本书深入探讨了...

    用Python,Lua和Ruby语言设计游戏-Game.Programming.with.Python.Lua.And.Ruby

    本资源主要涵盖了使用Python、Lua和Ruby这三种编程语言进行游戏设计的知识。这三种语言各有特点,适用于不同的游戏开发场景,下面将详细探讨每种语言在游戏编程中的应用及其优势。 1. Python Python是一种高级、...

    PHP、Python、Ruby的(数据库、文件)比较(原创).pdf

    在编程世界中,PHP、Python和Ruby都是广泛使用的脚本语言,尤其在Web开发领域。它们各自具有独特的特性和优势,特别是在处理数据库和文件操作时。以下是对这三种语言在数据库和文件操作方面的一些比较。 首先,我们...

Global site tag (gtag.js) - Google Analytics