Кажется, я нашел решение, и оно намного, намного чище, чем то, которое я изначально имел в виду.
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)
string uniqid ([ string $prefix [, bool $more_entropy ]] )
Получает снабженный префиксом уникальный идентификатор на основе текущего времени в микросекундах.
USAGE: $id = uniqid(rand(), true);
uniqid () - то, что Вы ищете в большинстве практических ситуаций.
можно сделать это еще большим количеством "uniq" путем добавления большого случайного числа после него.