>

나는 '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 등. 인스턴스에서 호출 유형은 잘 작동하지만 유형이 클래스에서도 호출 될 수 있으므로보다 '사용자 친화적 인'반환 문자열이 필요합니다.

  • 답변 # 1

    실제로 pyzwyz로 메타 메타 클래스를 작성하는 것을 막을 수있는 것은 아무것도 없습니다.  메타 클래스 자체 :

    __repr__
    
    

    In [2]: class MM(type): ...: def __repr__(cls): ...: return f"<metaclass {cls.__name__}" ...: In [3]: class M(type, metaclass=MM): ...: def __repr__(cls): ...: return f"<class {cls.__name__}>" ...: In [4]: class O(metaclass=M): ...: pass ...: In [5]: o = O() In [6]: o Out[6]: <<class O> at 0x7ff7e0089128> In [7]: O Out[7]: <class O> 의 출력 :

    repr(M)
    
    

    (여기서 혼란스러운 것은 In [8]: repr(M) Out[8]: '<metaclass M' 입니다.  또한 type 의 메타 클래스입니다.  그 자체-그것은 M이 type 에서 상속받지 않는다는 점에서 여기에 반영됩니다. 오히려 메타 클래스로 사용하십시오.)

  • 답변 # 2

    간단한 해결책을 찾았습니다. 내 클래스 구조 (상속 트리)는 다음과 같으므로 다음 클래스를 아래로 반환하면됩니다.

    MM
    
    

    내 코드에 넣은 것은 다음과 같습니다 :

    MetaType: metaclass with __repr__
     |
    Type: base class
     |
    builtins: e.g. String, Number
    
    

    t = type(self.parse(args['object'])) # where 'self.parse' is the parsing method for the argument to my function # where args['object'] is the object whose type is being returned if t == MetaType: return Type return t

  • 이전 python - Keras를 사용하여 문자 메시지에서 유용한 값 선택
  • 다음 python - viewspy에있는 다른 변수에 양식 "텍스트"입력을 전달하는 방법