복붙노트

[PYTHON] 클래스 이름을 동적으로 설정하는 방법은 무엇입니까?

PYTHON

클래스 이름을 동적으로 설정하는 방법은 무엇입니까?

그 인수에서 파생 된 클래스를 만드는 함수가 있습니다.

def factory(BaseClass) :
    class NewClass(BaseClass) : pass
    return NewClass

이제이 클래스를 사용하여 새 클래스를 만들면 클래스의 이름이 모두 같고 인스턴스의 유형이 같아 보입니다.

NewA = factory(ClassA)
NewB = factory(ClassB)
print type(NewA()) # <class __main__.NewClass>
print type(NewB()) # <class __main__.NewClass>

__name__ 속성을 수동으로 설정하기위한 적절한 수정이 있습니까?

NewA.__name__ = 'NewA'
print type(NewA()) # <class __main__.NewA>

내가있을 때 내가 정해야 할 다른 것들이 있습니까?

해결법

  1. ==============================

    1.네, __name__을 설정하는 것이 올바른 일입니다. 클래스 이름을 조정하기 위해 다른 것을 설정할 필요가 없습니다.

    네, __name__을 설정하는 것이 올바른 일입니다. 클래스 이름을 조정하기 위해 다른 것을 설정할 필요가 없습니다.

    예 :

    def factory(BaseClass) :
        class NewClass(BaseClass): pass
        NewClass.__name__ = "factory_%s" % BaseClass.__name__
        return NewClass
    

    타입은 여기에서 사용하는 것은 잘못되었습니다. 파이썬의 일반적인 클래스 구문으로 클래스를 정의하는 대신, 모든 클래스 속성을 수동으로 설정하게합니다. 예를 들어 손으로 클래스를 만드는 데 사용됩니다. 기본 클래스의 배열을 가지고 있고 그것을 사용하여 클래스를 만들고 싶다면 (파이썬의 클래스 구문으로는 할 수 없다). 여기서 사용하지 마십시오.

  2. ==============================

    2.type () 함수를 세 개의 인수와 함께 사용하여 체크 아웃하십시오. 다음 코드는 객체를 기본 유형으로 사용하고 초기 속성이없는 새 클래스 "NewA"를 만듭니다.

    type () 함수를 세 개의 인수와 함께 사용하여 체크 아웃하십시오. 다음 코드는 객체를 기본 유형으로 사용하고 초기 속성이없는 새 클래스 "NewA"를 만듭니다.

    >>> type('NewA', (object,), {})
    <class '__main__.NewA'>
    
  3. from https://stackoverflow.com/questions/5352781/how-to-set-class-names-dynamically by cc-by-sa and MIT license