Пишу функцию-генератор классов, которая принимает имя нового класса, функцию и возвращает класс. Нужно, чтобы str(myNewClass) возвращал имя класса. Для этого использую метакласс, которые переопределяет метод __repr__ для класса. Все работает на втором питоне, сейчас портирую на третий, но не тут-то было. Код:
import abc
class metaCommand (abc.ABCMeta):
def __repr__ (self):
return self._str
def commandFactory (name, function):
class cls (baseCommand):
_str = name
def __init__ (self, **kwargs):
baseCommand.__init__ (self, name)
cls.__name__ = name
return cls
class baseCommand (object):
__metaclass__ = metaCommand
@abc.abstractmethod
def __init__ (self, cmd):
pass
def scp_function():
pass
scp = commandFactory ('scp', scp_function)
print (scp)
yunake@x230:~/src/s3do$ python3 test.py
<class '__main__.commandFactory.<locals>.cls'>
yunake@x230:~/src/s3do$ python2 test.py
scp
Получается, py3 использует не __repr__ из метакласса, и не __str__ (тоже пробовал). Есть идеи?
судо каст tailgunner