Python:在已安装的egg文件中覆盖方法?

时间:2013-12-28 23:19:32

标签: python egg

所以我安装了一个python模块(python install setup.py),创建了egg,但是如何在egg文件中的一个类中覆盖一个方法呢?

这就是我正在做的事情,我修复了源代码并再次安装它。一次又一次地这样做是非常繁琐的。

1 个答案:

答案 0 :(得分:3)

直接修改第三方软件包的源代码不是一个好主意,你可以分叉回购,修改代码并构建自己的.egg文件,然后就可以安装自定义版本而不是标准版本,请参考http://peak.telecommunity.com/DevCenter/setuptools

或者您可以继承该类并覆盖该方法,例如,egg文件中有一个类EggClass

蛋中的

python模块egg.py

class EggClass(object):

    def cook(self):
        print 'Cooking ...'

你就像这样使用它

import egg
my_egg = egg.EggClass()
egg.cook()

但是你希望cook方法的烹饪方式不同,为什么不继承EggClass并覆盖cook这样的方法

class MySuperEgg(EggClass):

    def cook(self):
        print 'Special cooking manner ...'

所以你可以像这样使用它

egg = MySuperEgg()
egg.cook()

您也可以使用脏黑客替换原来的方法,而不是继承该类

def cook(self, time):
    print 'Special cooking for {} minutes ...'.format(time)

# ah... a dirty hack to override the original cook method
EggClass.cook = cook
egg = EggClass()
egg.cook(10)

您可以在代码中保留这些内容,因此无需修改其源代码。