如果您需要参数上的多态性(除了接收器),例如按照您的示例建议使用二元运算符处理类型转换,您可以使用以下技巧:
class EValue(object):
def __init__(self, v):
self.value = v
def __str__(self):
return str(self.value)
def opequal(self, r):
r.opequal_value(self)
def opequal_int(self, l):
print "(int)", l, "==", "(value)", self
def opequal_bool(self, l):
print "(bool)", l, "==", "(value)", self
def opequal_value(self, l):
print "(value)", l, "==", "(value)", self
class EInt(EValue):
def opequal(self, r):
r.opequal_int(self)
def opequal_int(self, l):
print "(int)", l, "==", "(int)", self
def opequal_bool(self, l):
print "(bool)", l, "==", "(int)", self
def opequal_value(self, l):
print "(value)", l, "==", "(int)", self
class EBool(EValue):
def opequal(self, r):
r.opequal_bool(self)
def opequal_int(self, l):
print "(int)", l, "==", "(bool)", self
def opequal_bool(self, l):
print "(bool)", l, "==", "(bool)", self
def opequal_value(self, l):
print "(value)", l, "==", "(bool)", self
if __name__ == "__main__":
v1 = EBool("true")
v2 = EInt(5)
v1.opequal(v2)