`
huangyiiiiii
  • 浏览: 119020 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用 python 模拟 ruby 的 open class

阅读更多
老早就写了这些代码,但一直懒得为它写篇博客,我觉得我永远也无法理解为什么会有人发明这种奇怪的东西。
不过终于还是决定写一篇吧,多一点有意思的代码也许能吸引更多人对 python 的兴趣呢,呵呵。虽然我对 ruby 的这个东西有许多贬义词想说,不过想想既然有人用,也就应该有其理由吧。
且看代码:

def update( klass, bases, attrs ):
for k,v in attrs.items():
if not k.startswith('__') or not k.endswith('__'):
setattr(klass, k, v)
if bases:
klass.__bases__ = bases
return klass

class Meta(type):
def __new__(cls, klass, bases, attrs):
try:
return update( globals()[klass], bases, attrs )
except KeyError:
return type.__new__(cls, klass, bases, attrs)

# test
__metaclass__ = Meta

# test simple
class A:
def say(self):
print 'hi'

a = A()
a.say() # hi

class A:
def say(self):
print 'ho'
def new_func(self):
print 'new'

a.say() # ho
a.new_func() # new

# test inherit
#del A
#class A:
#def say(self):
#print 'hi'

#a = A()
#a.say() # hi

#class B:
#def say(self):
#print 'ho'

#class A(B):
#def say(self):
#super(A, self).say()

#a.say() # ho

update: 很遗憾,测试发现 new style class 貌似还有个 bug 。所以把后面部分注释了先,不知道 python2.5 怎么样。
分享到:
评论

相关推荐

    ruby初学者教程(对初学者很有帮助)

    虽然Ruby和Python都属于高级动态语言,但它们之间仍存在一些差异: - **语法风格**:Ruby的语法更加灵活,允许更多的表达方式;而Python则强调代码的一致性和可读性。 - **社区文化**:Ruby社区更倾向于快速开发和...

    ruby 程序设计

    - **脚本能力**:Ruby可以作为一种强大的脚本语言使用,适用于快速原型开发。 - **可扩展性**:通过C语言扩展,Ruby可以轻松地与其他语言集成。 ##### §1.4 Ruby和Python的比较 - **相似之处**:两者都注重代码的...

    RUBY基础入门指南

    - **使用Ruby**:直接在命令行中输入`ruby filename.rb`来运行脚本文件。 - **使用IDE**:推荐使用FreeRIDE或SciTE等集成开发环境,提供更好的编辑体验。 **2.3 Ruby-irb** IRB(Interactive Ruby Shell)是一个...

    Ruby程序设计(简洁清新的教程)

    - **使用Ruby解释器**:直接通过命令行运行Ruby脚本。 - **使用IDE**:例如FreeRIDE、SciTE等,提供更友好的编程界面。 - **使用fxri**:用于查看文档和API信息。 **2.3 Ruby-irb** irb是Ruby的交互式Shell,可...

    在网页中使用Open Flash Chart 展示图表

    Open Flash Chart是一款开源的Flash图表库,它允许开发者使用简单的JavaScript和服务器端语言(如PHP、Python、Ruby等)创建高质量、自定义化的图表。这个教程将围绕Open Flash Chart的基本用法展开,帮助你理解如何...

    Python api 库函数学习

    在本篇文章中,我们将详细介绍Python标准库中的关键模块及其功能,帮助读者更好地理解和使用这些强大的工具。通过深入学习这些模块,读者不仅能够提高编程效率,还能进一步拓展Python的应用领域。 #### 二、核心...

    Ruby 基础

    - Ruby提供丰富的文件I/O API,如 `File.open`,`File.read`,`File.write` 等。 9. **正则表达式** - Ruby内置正则表达式支持,用于文本匹配和替换。 10. **Gem** - Ruby的库管理工具,类似于其他语言的包管理...

    python 调用HBase的简单实例

    对于Python而言,我们需要使用Thrift来生成Python客户端代码,从而能够与HBase服务通信。 - 下载并解压Thrift源码包,例如使用`thrift-0.7.0-dev.tar.gz`。 - 进入解压后的目录,执行配置命令: ```bash sudo ....

    oflaDemo源代码

    2. `demoservice.js`、`demoservice.rb`、`demoservice.py`:这些文件可能是服务端脚本,分别使用JavaScript、Ruby和Python编写。它们可能实现了OFLADemo的核心功能,如处理客户端请求、提供流媒体服务等。 3. `...

    selenium RC怎么使用

    它的核心功能在于允许程序员使用多种编程语言(如Java、Python、Ruby等)编写测试脚本,然后通过Selenium Server与浏览器进行交互,实现网页的自动化操作。以下将详细介绍如何使用Selenium RC。 首先,你需要获取...

    qwandry:Qwandry 为您提供了一种轻松打开所有项目和库的方法

    qw matrix # opens ruby's matrix class in your editor qw rails # will ask you which version of rails you want to open qw activerec 3.1 # will find the gem activerecord 3.1 and open it 您还可以将 ...

    易用脚本例程.rar

    脚本语言,比如Python、JavaScript、Perl、Ruby等,与编译型语言(如C++、Java)不同,它们通常不需要预编译步骤,而是直接由解释器逐行执行。这使得脚本语言更适合快速开发和原型设计。 1. **变量和数据类型**:在...

    11种连接数据库的方法

    例如,使用`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。 2. **.NET ADO.NET** .NET Framework中的ADO.NET提供了连接、命令、数据适配器和数据集等组件,用于与SQL Server、Oracle等...

    Selenium学习笔记

    IDE 使用 JavaScript 记录用户的浏览器交互,然后将这些交互转换为可读性强、易于维护的脚本,支持多种编程语言,如 Java、C#、Python 和 Ruby。此外,Selenium IDE 还具有回放功能,可以方便地测试脚本的有效性。 ...

    打印原代码,打印原代码

    首先,你需要知道类的全名,然后通过`ClassLoader`加载该类,最后读取对应的`.class`文件。由于Java的源代码通常不随可执行文件一起发布,所以这种方法更多用于获取编译后的字节码。 3. **JavaScript**: ...

    采用java操作thrift代码示例

    在Java开发中,Thrift是一种高效、跨语言的服务框架,由Facebook开源,现已被Apache基金会维护。...同时,Thrift也支持C++, Python, PHP, Ruby等其他编程语言,为构建分布式系统提供了极大的便利。

    Thrift使用示例代码

    Thrift支持多种语言,包括C++, Java, Python, PHP, C#, Ruby等,这使得跨语言服务的开发变得更加容易。同时,Thrift还提供了多种传输层和协议选择,以适应不同的网络环境和性能需求。 总结来说,Thrift是一个强大的...

    Selenium深入浅出1.2.pdf

    - **多语言支持**:支持多种编程语言(如 Java、C#、Python 等),方便不同技术背景的开发者使用。 - **多浏览器兼容性**:可以在不同的浏览器(如 Firefox、Chrome、IE)上运行测试脚本,确保应用程序的兼容性。 ...

    mysql驱动包

    5. **Python驱动**:Python社区有多种MySQL驱动,如MySQLdb(基于DB-API 2.0)、PyMySQL(纯Python实现,兼容MySQLdb)以及pymysql-cffi(CFFI封装,更快)等。 6. **其他驱动**:MySQL还支持其他编程语言的驱动,...

Global site tag (gtag.js) - Google Analytics