2014-03-31 4 views
0

질문이 약간 혼란 스럽기 때문에 다음에 더 자세히 설명하겠습니다.클래스 생성시 동적으로 생성 된 메타 클래스를 동적으로 할당하십시오.

나는이 두 클래스 중 하나가 type 상속 정의했다 :

class ProductType(type): 
    def __new__(cls, name, bases, attrs): 
     return super(ProductType, cls).__new__(cls, name, bases, attrs) 


class Product(object): 
    __metaclass__ = ProductType 

이제 런타임에, 나는 ProductType의 서브 클래스 생성 :

Insurance = type('Insurance', (ProductType,), {}) 

그리고을의 서브 클래스를 생성 Product으로 설정하면 해당 메타 클래스는 Insurance으로 설정됩니다.

이제 명백한 이유가 있습니다 (지금까지는 보이지 않습니다). type(HouseInsurance)을 입력하면 Insurance이 아니라 ProductType이됩니다. 동적으로 생성 된 클래스가 어떤 이유로 동적으로 생성 된 메타 클래스를 무시하는 것으로 보입니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?

답변

2

대신,

>>> HouseInsurance = Insurance('HouseInsurance', (Product,), {}) 
>>> type(HouseInsurance) 
__main__.Insurance 

__metaclass__ 런타임으로 반대 프로그래머가, 시간을 구문 분석 파일에서 클래스 객체의 생성자를 표현하기위한 방법이다 사용합니다.

+0

오, 나는 그것이 간단한 것이라고 알고있었습니다. 이것을 지적 해 주셔서 감사합니다! – linkyndy

관련 문제