Это скорее теоретический вопрос и не относится к реальной проблеме.
Учитывая, что у вас есть какой-то класс:
class A():
pass
a = A()
type(a)
# <class '__main__.A'>
Возможно ли реализовать что-то подобное?
from random import randint
class Randomized(type):
def __new__(cls, name, bases, attrs):
attrs['__qualname__'] += str(randint(0, 99))
return super(Randomized, cls).__new__(cls, name, bases, attrs)
class A(metaclass=Randomized):
pass
a = A()
b = A()
# as I was thinking:
type(a)
# <class '__main__.A75'>
type(b)
# <class '__main__.A23'>
Пример выше не работает, как я ожидал, потому что кажется, что Randomized.__new__
вызывается только один раз:
a = A()
b = A()
type(a)
# <class '__main__.A66'>
type(b)
# <class '__main__.A66'>
Связанный PEP о метаклассах: https://www.python.org/dev/peps/pep-3115/