当我尝试将不同的函数分配给不同的类成员时,最后声明的值会被覆盖。
class Object:
def __init__(self, *args, **kwargs):
pass
class Service:
@staticmethod
def get_a_value():
return 1
@staticmethod
def get_b_value(*args, **kwargs):
return 2
def __init__(self, *args, **kwargs):
self.a = Object
self.b = Object
self.a.execute = self.get_a_value
self.b.execute = self.get_b_value
if __name__ == '__main__':
obj = Service()
print(obj.a().execute())
print(obj.b().execute())
预期输出是 1 和 2,但我得到的都是 2。不确定我在这里缺少什么。如何确保可以为 a.execute 和 b.execute 分配不同的函数。任何帮助将不胜感激。
最佳答案
如何使用派生自 Object
的类为 a
和 b
成员创建特定对象:
class Object:
def __init__(self, *args, **kwargs):
pass
class Service:
@staticmethod
def get_a_value():
return 1
@staticmethod
def get_b_value(*args, **kwargs):
return 2
def __init__(self, *args, **kwargs):
class ObjectA(Object):
@staticmethod
def execute():
return Service.get_a_value()
class ObjectB(Object):
@staticmethod
def execute():
return Service.get_b_value()
self.a = ObjectA
self.b = ObjectB
if __name__ == '__main__':
obj = Service()
print(obj.a().execute())
print(obj.b().execute())
这会打印
1
2
当然,如果方法不是静态的,这可能会变得稍微复杂一些,但这可以在下面的示例中轻松调整,其中所有方法都是完整的非静态方法
class Service:
def get_a_value(self):
return self.__a_value
def get_b_value(self):
return self.__b_value
def __init__(self, *args, **kwargs):
self.__a_value = 1
self.__b_value = 2
class ObjectA(Object):
def execute(myself):
return self.get_a_value()
class ObjectB(Object):
def execute(myself):
return self.get_b_value()
您会注意到,execute
方法中使用的 self
引用了 Service
的实例(因此 myself
子类中的第一个参数)。即使没有方法是静态的,它也可以工作,并且可以访问实例的值。
这样,您就可以创建成熟的对象接口(interface)。
关于python - 对象成员函数被重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57249564/