`

IronPython的第三块鳞片

阅读更多

        已经两天没有见到IronPython那条小蟒蛇,你想念它了吗?今天就再跟大家说说它的事情吧。由于IronPython的老爸Jim的blog半天都不会更新一次,Mail List就成为所有的信息的来源了。9月份的Mail依旧热闹,而且很多热心的程序员对一些bug给出了自己的解决办法。
        1、对于Interactive方式下class的定义,如下

>>> class FantasySoft:
     def hello(self):
         print 
"Hello,world!"

会抛出System.Reflection.TargetException: Non-static field requires a target。这个bug在IronPython的第一块鳞片(补充)中有提及。一位程序员给出了解决的办法:将IronPython/Object下面的module.cs中的124行return fi.GetValue(null) 改为return fi.GetValue(this) 即可。我兴高采烈的尝试去编译IronPython整个project的时候,结果一个error蹦了出来:The name SystemUtils.IdentityHashCode could not be found in IronPython. Objects. Ops。我差点没跌破眼镜,怎么会有这样的错误呢?搜索了半天,只是发现了在Mono下面编译也会出现这样的错误。后来猛地想起了一个重要的文档没有看,就是IronPython自带的readme,赶紧查看了一下,原来如果要重新编译IronPython,就要增加对SystemUtil.dll的引用,这个.dll文件就在bin目录下。赶紧在SharpDevelop中增加了对SystemUtil.dll的引用,编译通过了!接着试了一下原来抛出异常的代码,一切正常!当然通常修改了一个bug都有可能带来新的bug,因此还不能保证这样的改动会不会对其他部分产生影响;
        2、在IronPython下可以通过两种方式得到一个对象的类型:variable.GetType()和type(variable),但是第一种方式只会得到该类型的超类,大家看以下的代码就会清楚了:

import System
from System.Text import StringBuilder
class FirstStringBuilder(object):
    pass
class SecondStringBuilder(object):
    pass
class ThirdStringBuilder(FirstStringBuilder):
    pass
        
sb 
= StringBuilder()       
fsb 
= FirstStringBuilder()
ssb 
= SecondStringBuilder()
tsb 
= ThirdStringBuilder()

print type(sb), type(fsb), type(ssb), type(tsb)
print sb.GetType(), fsb.GetType(), ssb.GetType(), tsb.GetType()

print type(fsb) 
== type(ssb)
print fsb.GetType() 
== ssb.GetType()

print type(fsb) 
== type(tsb)
print fsb.GetType() 
== tsb.GetType()

对以上代码说明一下,后面四个布尔表达式的值分别为False,True,False和True。因此只有使用type才能得到对于对象类型最准确的描述。还有一种在Interactive方式下得到类型的方式,就是使用内建的__name__属性了具体方式如下:

>>>from System.Text import *
>>>= StringBuilder
>>>s.__name__

这样是OK的,但是如果将第二行代码改为s = StringBuilder(),则会抛出异常Unhandled Exception: IronPython. Objects. PythonAttributeError: 'System.Text.StringBuilder' object has no attribute '__name__'。而且这种方式在script中不管使用s = StringBuilder还是s = StringBuilder()都会抛出异常,着实是不稳定。
        3、在IronPython下可以通过内建的方法globals()得到一个已经创建的Object的list,但是在Python中,还可以使用globals().values()仅仅列出值而不包括变量名,但是在IronPython下利用这种方式则会出现致命的错误:Fatal stack overflow error.从而导致整个程序退出。
        今天就先到这里了,有兴趣的朋友可以访问Mail List获得更多的信息。        
        
        PS:Sharp Develop还是挺好用的,至少它的简洁深得我心。而且还有一个关键的功能是能够将VS.NET下的solution进行导入,省去了安装VS.NET这个庞然大物的烦恼,我的硬盘就只剩下可怜的1G剩余空间了。
 

分享到:
评论

相关推荐

    IronPython安装python第三方库的必须工具setuptools-py2.7.egg

    总之,setuptools-py2.7.egg是针对IronPython的特殊解决方案,它使得在.NET框架内管理Python第三方库成为可能。通过正确安装和使用setuptools,开发者可以在IronPython环境中充分利用Python生态系统的丰富资源,提升...

    IronPython-2.7.5.zip

    9. **库支持**:IronPython能够导入和使用许多Python第三方库,尽管可能需要一些适配工作,特别是那些依赖于C扩展的库。 10. **工具集成**:IronPython可以很好地与Visual Studio等.NET开发工具集成,提供调试、...

    IronPython-2.7.4(内附样例程序)

    IronPython-2.7.4 是一个开源的Python实现,它是专门为.NET Framework和 Mono 平台设计的。这个版本的IronPython兼容Python 2.7的语法和库,允许开发者在.NET环境中运行Python代码,同时也支持与.NET组件的无缝集成...

    在.Net6中调用IronPython实现动态执行脚本

    在.NET 6中调用IronPython来实现动态执行脚本是一项强大的功能,它允许程序员在运行时编写和执行Python代码,极大地增强了应用的灵活性。IronPython是一个开源的Python实现,它能够无缝集成到.NET环境中,使得.NET...

    IronPython开发工具

    3. **项目管理**:帮助组织和管理IronPython项目,包括源代码、资源文件等。 4. **集成环境**:与.NET Framework紧密集成,能调用.NET库,同时也能被.NET应用程序调用。 5. **交互式窗口**:类似于Python的命令行...

    IronPython in Action

    3. IronPython与.NET集成:这部分将详细介绍IronPython如何与.NET Framework的类库进行交互,包括如何导入和使用.NET的类、接口和方法。还会涉及动态类型和类型转换的概念,以及如何通过IronPython调用.NET的...

    IronPython 2.6源代码

    10. **社区与资源**:由于IronPython是开源项目,有活跃的社区提供支持,包括文档、示例代码和第三方库,这对于学习和解决问题非常有帮助。 深入研究IronPython 2.6的源代码,不仅可以了解Python语言的实现细节,还...

    微软IronPython源码

    3. **动态类型系统**:Python的动态类型系统在IronPython中得以保留,这意味着变量的类型可以在运行时改变,提供了高度的灵活性。 4. **.NET互操作性**:IronPython通过CLS Compliance(公共语言规范)与.NET组件...

    IronPython-2.7.7.msi 金蝶云 调试python脚本环境搭建。

    标题中的"IronPython-2.7.7.msi"指的是IronPython的一个版本,这是一个开源的Python实现,可以在.NET Framework上运行。它允许开发者使用Python语言编写应用程序,同时利用.NET平台的强大功能。金蝶云,另一方面,是...

    IronPython-1.1.1

    IronPython-1.1.1 是一个特定版本的IronPython实现,它是一个高效且功能强大的Python解释器,专为.NET Framework和Mono平台设计。由Jim Hugunin在微软的引领下开发,IronPython的独特之处在于它能够无缝地融入.NET...

    IronPython简单程序源码

    IronPython是一种基于Python编程语言的开源实现,它允许开发者在.NET Framework上运行Python代码,并能够无缝集成到.NET环境中。这个“IronPython简单程序源码”很可能是为了展示如何在Visual Studio 2008中使用Iron...

    IronPython-2.7.11.rar

    IronPython是Python编程语言的一个实现,它允许开发者在.NET平台上编写和运行Python代码。这个压缩包文件"IronPython-2.7.11.rar"包含了IronPython的版本2.7.11,这是一个针对.NET Framework的兼容性更新,旨在提供...

    IronPython.7z

    - **IronPython 3.4.0a1**:这是一个测试版,对应Python 3.4的第一个alpha版本。Python 3.x引入了许多重大改变,包括语法更新和向后不兼容的改进。这个版本的IronPython让开发者可以尝试Python 3的新特性,但可能...

    C# IronPython 脚本引擎源码 + 例子

    3. **示例**:这些示例可能会展示如何在C#项目中嵌入IronPython脚本,如何执行Python代码,以及如何在Python脚本中调用.NET组件。 4. **测试套件**:用于验证IronPython的正确性和性能的测试用例,可以帮助开发者...

    IronPython和C#交互

    标题中的"IronPython和C#交互"涉及到的是两种不同编程语言——IronPython(一种Python的实现,能够在.NET框架上运行)和C#之间的协同工作。 IronPython的优势在于它允许Python开发者利用.NET平台的强大功能,而C#是...

    IronPython2.0最新版本以及IDE等源码

    【IronPython2.0最新版本】是Python编程语言的一个实现,它允许开发者在.NET Framework上运行Python代码。这个实现由Microsoft开发,旨在提供一个与标准CPython解释器兼容的环境,同时利用.NET平台的高性能和丰富的...

    Atom-ironpython-stubs,通用ironpython/.net库的自动完成存根.zip

    Atom-ironpython-stubs是一个专为IronPython和.NET框架开发者设计的工具,它提供了一套自动完成的存根(stubs)文件。这些存根文件主要用于增强开发环境的代码补全功能,帮助程序员在使用IronPython进行.NET库的交互...

    IronPython-2.7.5

    3. 数据科学:Python 在数据处理和分析方面拥有强大的库(如 NumPy、Pandas 和 Matplotlib),可以通过 IronPython 在 .NET 应用程序中使用这些库。 4. 游戏开发:游戏引擎通常基于 C#,而游戏逻辑部分可能更适合用 ...

    IronPython-2.7.7-win.zip

    3. **高性能**:由于运行在.NET平台上,IronPython利用了JIT(Just-In-Time)编译器,提高了代码执行效率,使得Python程序的运行速度得到显著提升。 4. **标准库支持**:IronPython包含了Python的标准库,尽管并非...

Global site tag (gtag.js) - Google Analytics