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)
オブジェクト指向のバックグラウンドから来ているため、このソリューションは洗練されていないようです。Matchable クラスを使用すると、醜いコードになります。私は match_type を排除し、代わりに各型をスーパークラスから継承した独自のクラスにし、型チェックを使用して比較を行いたいと考えています。ただし、型チェックは一般的に嫌われているようです。
http://www.canonical.org/~kragen/isinstance/
この機能を実装するためのより良い (より Pythonic な) 方法はありますか?
注: Python の「列挙型」に関する多数の質問と回答があることは承知しており、それらの回答のいずれかが適切である可能性があります。オーバーライドされた __ eq __ 関数の要件は問題を複雑にします。この場合に提案された enum 実装を使用する方法は見たことがありません。
これを行うために私が思い付くことができる最良のオブジェクト指向の方法は次のとおりです。
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