如何通过自己的方法ovveride导入的方法

时间:2019-05-02 12:10:57

标签: python

我有一个python文件,可以按照以下步骤恢复:

from external_libs import save

class FakeClass1(MotherFakeClass1):

    @property
    def field(self):
        if self.settings['save_parameter_booelan']:#settings come from the mother class but irelevant
             import FakeClass2.save as save
             # I want to override the save method by the one defined in the FakeClass2
             return BehaviorModifierField(super(FakClass1, self).field) #The behavior Modifier decorate the new field but it's irelevant of what it does.
         return super(FakClass1, self).field


    def fakeMethod(self, boolean_val):
        save('blabla')

class FakeClass2:
     @staticmethod
     def save(test):
         #irrelevant core of the method

想法就在这里,但我很难找到这样做的权利。 我想如果可以将FakeClass2移动到另一个文件中,但我不想这样做,则可以做得更好。 你有更好的主意吗?

3 个答案:

答案 0 :(得分:1)

staticmethod是不正确的选择,因为它是通过Class.method调用的。您的保存不是那样使用的。即使是,它也位于FakeClass上,不是 FakeClass2

如果要根据类调用不同的save,只需添加一个save METHOD(不是function!)并使用选择的函数。例如

from library import standard_save

class A:
     def work(self):
         self.save()

     def save(self):
         standard_save()


 class B(A):

     def save(self):
         do_something_else()

答案 1 :(得分:0)

不要传递布尔值;通过要使用的功能。

coordinates_x = ('252291.12483051314', '294319.54664371524', '297881.2773058511', '296456.5850409968', '240893.58671167865', '190317.0113093506', '188179.97291206918', '274373.8549357549', '252291.12483051314')
coordinates_y = ('1116798.7306648178', '1122497.4997242352', '1084030.8085731687', '1022769.0411844333', '988576.4268279299', '957945.5431335622', '985014.696165794', '1048413.5019518109', '1116798.7306648178')

答案 2 :(得分:0)

我认为您太过复杂了。

具有一个布尔值来确定save方法的行为,这意味着save方法根据类的实例,根据实例的布尔值而表现不同。
如果这是您想要的,这是我能想到的最简单的方法。

class FakeClass1(MotherFakeClass1):
    def __init__(self):
        #your __init__ here

    def save(self):
        if self.settings['save_parameter_booelan']:
             FakeClass2.save()
             #or whatwever method you want to use in this case,
             #even if is not this class method or another class method
        else:
             raise NotImplementedError
             #or whatever code should be executed by save
             #when save_parameter_boolean is false