所以我安装了一个python模块(python install setup.py),创建了egg,但是如何在egg文件中的一个类中覆盖一个方法呢?
这就是我正在做的事情,我修复了源代码并再次安装它。一次又一次地这样做是非常繁琐的。
答案 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)
您可以在代码中保留这些内容,因此无需修改其源代码。