使用 Python,我正在尝试实现一组类型,包括“无关”类型,用于模糊匹配。我已经这样实现了:
class Matchable(object):
def __init__(self, match_type = 'DEFAULT'):
self.match_type = match_type
def __eq__(self, other):
return (self.match_type == 'DONTCARE' or other.match_type == 'DONTCARE' \
or self.match_type == other.match_type)
来自 OO 背景,这个解决方案看起来不优雅;使用 Matchable 类会产生丑陋的代码。我更喜欢消除 match_type,而是让每个类型都有自己的类继承自超类,然后使用类型检查来进行比较。然而,类型检查似乎通常不被接受:
http://www.canonical.org/~kragen/isinstance/
是否有更好的(更pythonic)方法来实现这个功能?
注意:我知道关于 Python“枚举”的大量问题和答案,其中一个答案可能是合适的。重写的 __ eq __ 函数的要求使事情变得复杂,而且我还没有看到在这种情况下使用提议的枚举实现的方法。
我能想到的最好的 OO 方法是:
class Match(object):
def __eq__(self, other):
return isinstance(self, DontCare) or isinstance(other, DontCare) or type(self) == type(other)
class DontCare(Match):
pass
class A(Match):
pass
class B(Match):
pass
d = DontCare()
a = A()
b = B()
print d == a
True
print a == d
True
print d == b
True
print a == b
False
print d == 1
True
print a == 1
False