필자는 파이썬에서 메타 클래스에 대한 직감을 얻으려고했다. 나는 Python2.7과 Python3.5 둘 다 시도했다. 파이썬 3.5에서는 우리가 명시 적으로 상속했는지 여부에 관계없이 우리가 정의한 모든 클래스가 유형이 <class 'type'>
인 것을 발견했다. 그러나 유형에서 상속받지 않으면 해당 클래스를 다른 클래스의 메타 클래스로 사용할 수 없습니다.명시 적으로 'type'을 상속하여 python3.x에서 메타 클래스 구현하기
>>> class foo:
pass
>>> class Metafoo(type):
pass
>>> foo
<class '__main__.foo'>
>>> Metafoo
<class '__main__.Metafoo'>
>>> type(foo)
<class 'type'>
>>> type(Metafoo)
<class 'type'>
>>>
>>> class foocls1(metaclass=foo):
pass
나는 다음과 같은 오류 얻을 위의 일을 :
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
class foocls1(metaclass=foo):
TypeError: object() takes no parameters
을하지만
>>> class foocls3(metaclass=Metafoo):
pass
>>> foocls3
<class '__main__.foocls3'>
>>> type(foocls3)
<class '__main__.Metafoo'>
사람이 이유를 설명 할 수있는 새로운 클래스의 메타 클래스로 Metafoo를 사용하는 동안 그런 경우가 아닌를 다른 클래스에서 클래스를 메타 클래스로 사용하려면 명시 적으로 상속해야합니다.
모든 클래스는'type'의 * 인스턴스 *이지만'type'의 모든 하위 클래스 *는 아닙니다. – user2357112