Мне известно о возможности определения 'class repr'
с помощью метакласса.Однако мне нужна функциональность для возврата метакласса с его собственным __repr__
как таковым:
class Meta(type):
def __repr__(cls):
return 'Person class: {}'.format(cls.__name__)
class Person(metaclass=Meta):
def __init__(self, name, age, job):
self.name = name
self.job = job
self.age = age
def __str__(self):
return 'Person: {}, {}, {}'.format(self.name,
self.age,
self.job)
class Employee(Person):
def __init__(self, name, age):
super(Employee, self).__init__(name, age, 'employee')
class Manager(Person):
def __init__(self, name, age):
super(Manager, self).__init__(name, age, 'manager')
m = Manager('bob', 79)
e = Employee('stephen', 25)
Как и ожидалось, type(e)
и type(m)
возвращают свои соответствующие 'Person class: ...'
, однако, если я это сделаюtype(Employee)
, я получаю <class '__main__.Meta'>
.Мне нужно, чтобы этот класс имел свой собственный __repr__
, так как фактическая реализация, которую я использую, состоит из базового класса Type
с подклассами String
, Number
и т. Д. Вызов типа в экземплярах работает просто отлично, но так какТип также может быть вызван в классе, мне нужна более удобная для пользователя возвращаемая строка.