【发布时间】:2019-02-23 10:44:12
【问题描述】:
我知道使用元类定义'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 等子类组成。在实例上调用类型就可以了,但是因为type 也可以在类上调用,我需要一个更“用户友好”的返回字符串。
【问题讨论】:
标签: python python-3.x oop metaclass repr