擅长:python、mysql、java
<p>我似乎找到了一个解决办法,而且比我最初想的要干净得多。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>class MyMetaSuper(type):
pass
class MyObject:
def __init__(self, t):
self.t = t
def __class_getitem__(cls, key):
class MyMeta(MyMetaSuper):
t = key
def __instancecheck__(self, instance):
return isinstance(instance, cls) and self.t == instance.t
def __subclasscheck__(self, subclass):
return isinstance(subclass, MyMetaSuper) and self.t == subclass.t
class MyObjectSpecific(MyObject, metaclass=MyMeta):
pass
return MyObjectSpecific
# Check for specific condition
assert isinstance(MyObject(0), MyObject[0])
# Make sure isinstance fails when condition fails
assert not isinstance(MyObject(0), MyObject[1])
# Test the generic object
assert isinstance(MyObject(0), MyObject)
</code></pre>