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中。
分享到:
- 2009-03-04 18:32
- 浏览 4116
- 评论(7)
- 论坛回复 / 浏览 (7 / 6305)
- 查看更多
相关推荐
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是两种强大的、高效且易学的编程语言,它们在现代软件开发中扮演着重要的角色。本文将探讨为什么学习Python或Ruby对于程序员来说是必要的,并与一些常见的编程语言进行对比。 首先,Python和Ruby相比C/...
标题中的“Python & Ruby 学习”表明了这个压缩包文件包含了与这两种编程语言学习相关的资源。Python 和 Ruby 都是流行的高级编程语言,广泛应用于Web开发、数据分析、自动化脚本等多个领域。以下是对这两个语言的...
根据给定的信息,“Python、Ruby游戏设计参考图书”是一本详细介绍如何使用Python和Ruby这两种脚本语言进行游戏设计与开发的书籍。本书不仅涵盖了游戏设计的基本原理,还深入探讨了如何利用这两种流行的编程语言来...
Python vs Ruby 1. 问题解决方式:Python 和 Ruby 都是面向对象的语言,都是动态和灵活的,但它们解决问题的方式不同。 2. 框架支持:Python 的 Django 极其相似于 Ruby 的 Ruby-on-Rails,都是高效的框架。 3. ...
在本主题中,我们将探讨三种语言——Python、Lua和Ruby在游戏开发中的应用。 首先,Python以其简洁易读的语法和丰富的库支持而闻名,使其成为初学者和专业人士的理想选择。在游戏编程中,Python可以用于创建游戏...
Python和Ruby都是高级编程语言,它们在Web开发、脚本编写、数据分析等领域有着广泛的应用。这份资料《Python和Ruby比较优缺点共1页.pdf》可能是对这两种语言在特性、性能、社区支持、学习曲线等方面的对比分析。虽然...
在文件操作方面,三者都能满足基本需求,但Python和Ruby的语法通常被认为更易读,Python的os模块和Ruby的File类提供了高度封装的操作。PHP虽然可能需要更多的代码来实现相同功能,但在某些特定场景下,其文件处理...
尽管C、C++、Java等经典编程语言依然是主流,但Python和Ruby因其简洁、易学、开发效率高等特点,在业界受到了越来越多的关注。本文将探讨为何Python和Ruby对程序员如此重要,以及它们与其他编程语言相比的优势所在。...
python-ruby-golang click(Python),thor(Ruby)和cli.go(Golang)的比较,用于构建非常简单的命令行工具。 快速开始 有关更多信息,请参见每个子目录中的README.md。 博客文章
### Python与Ruby:异同与选择 #### 引言 在选择编程语言的过程中,开发者往往会根据项目的具体需求和个人偏好来做出决策。对于那些在Python和Ruby之间徘徊的开发者而言,了解这两种语言之间的区别和相似之处至关...
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”和“非常...
我应该学习Python还是Ruby? 乍一看,Python和Ruby似乎是非常相似的语言。 两者都是用于快速开发的高级语言。 两种语言都是优美的语言,如果编写得当,它们会很直观,并且读起来很像英语。 动态是什么意思? 好吧...
标题提到的"用Python, Lua 和 Ruby语言设计游戏",这三种动态语言各自拥有独特的优点,适用于不同的游戏开发场景。接下来,我们将深入探讨每种语言在游戏开发中的应用、特点以及它们如何协同工作。 **Lua** Lua 是...
在游戏开发领域,Python、Lua和Ruby这三种脚本语言因其简洁、高效和易学习的特点,逐渐成为开发者们的首选工具。《用Python,Lua和Ruby语言设计游戏-Game.Programming.with.Python.Lua.And.Ruby》这本书深入探讨了...
本资源主要涵盖了使用Python、Lua和Ruby这三种编程语言进行游戏设计的知识。这三种语言各有特点,适用于不同的游戏开发场景,下面将详细探讨每种语言在游戏编程中的应用及其优势。 1. Python Python是一种高级、...
在编程世界中,PHP、Python和Ruby都是广泛使用的脚本语言,尤其在Web开发领域。它们各自具有独特的特性和优势,特别是在处理数据库和文件操作时。以下是对这三种语言在数据库和文件操作方面的一些比较。 首先,我们...