Python:在已安装的egg文件中重写方法?

Python:在已安装的egg文件中重写方法?,python,egg,Python,Egg,因此,我安装了一个python模块(python install setup.py),创建了egg,但是如何覆盖egg文件中某个类中的方法呢 这就是我正在做的,我修复源代码并再次安装。反复这样做是非常乏味的。直接修改第三方软件包的源代码不是一个好主意,您可以通过fork repo,修改代码并构建自己的.egg文件,然后您可以安装自定义版本而不是标准版本,请参考 或者您可以只继承类并重写方法,例如,您在egg文件中有一个类EggClass python模块egg.py在egg中 class Egg

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


这就是我正在做的,我修复源代码并再次安装。反复这样做是非常乏味的。

直接修改第三方软件包的源代码不是一个好主意,您可以通过fork repo,修改代码并构建自己的.egg文件,然后您可以安装自定义版本而不是标准版本,请参考

或者您可以只继承类并重写方法,例如,您在egg文件中有一个类
EggClass

python模块
egg.py
在egg中

class EggClass(object):

    def cook(self):
        print 'Cooking ...'
你是这样用的

import egg
my_egg = egg.EggClass()
egg.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)
但是您希望cook方法的烹饪方式有所不同,为什么不直接继承
EggClass
并像这样重写
cook
方法呢

import egg
my_egg = egg.EggClass()
egg.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)
所以你可以这样使用它

import egg
my_egg = egg.EggClass()
egg.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)
除了继承类之外,您还可以使用肮脏的hack来替换原始方法,如下所示

import egg
my_egg = egg.EggClass()
egg.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)
您可以将它们保留在代码中,因此无需修改它们的源代码