我有一个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
移动到另一个文件中,但我不想这样做,则可以做得更好。
你有更好的主意吗?
答案 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