[python] 변수가 클래스인지 아닌지 확인하는 방법?

변수가 클래스인지 아닌지 확인하는 방법이 궁금합니다 (인스턴스 아님!).

이 기능을 사용 isinstance(object, class_or_type_or_tuple)하여이 작업을 시도했지만 클래스에 어떤 유형이 있는지 알 수 없습니다.

예를 들어 다음 코드에서

class Foo: pass  
isinstance(Foo, **???**) # i want to make this return True.

class“를 ???로 바꾸려고했습니다. 하지만 class파이썬에서 키워드 라는 것을 깨달았습니다 .



답변

더 나은 : inspect.isclass기능을 사용하십시오 .

>>> import inspect
>>> class X(object):
...     pass
... 
>>> inspect.isclass(X)
True

>>> x = X()
>>> isinstance(x, X)
True
>>> y = 25
>>> isinstance(y, X)
False


답변

inspect.isclass는 아마도 최고의 솔루션 일 것입니다. 실제로 어떻게 구현되는지 쉽게 알 수 있습니다.

def isclass(object):
    """Return true if the object is a class.

    Class objects provide these attributes:
        __doc__         documentation string
        __module__      name of module in which this class was defined"""
    return isinstance(object, (type, types.ClassType))


답변

>>> class X(object):
...     pass
...
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True


답변

isinstance(X, type)

클래스 True인지 아닌지 여부를 반환 합니다 .XFalse


답변

이 검사는 Python 2.x 및 Python 3.x와 모두 호환됩니다.

import six
isinstance(obj, six.class_types)

이것은 기본적으로 andrea_crotti 답변에서와 동일한 검사를 수행하는 래퍼 함수입니다.

예:

>>> import datetime
>>> isinstance(datetime.date, six.class_types)
>>> True
>>> isinstance(datetime.date.min, six.class_types)
>>> False


답변

Foo : 클래스는 이전 스타일 클래스라고하고 X (object) 클래스는 new 스타일 클래스라고합니다.

이 체크 파이썬 오래 된 스타일과 새로운 스타일 클래스의 차이점은 무엇입니까? . 새로운 스타일을 권장합니다. “읽기에 대한 통일 유형 및 클래스


답변

가장 간단한 방법은 inspect.isclass가장 투표가 많은 답변에 게시 된대로 사용 하는 것입니다.
구현 세부 사항은 python2 inspectpython3 inspect 에서 찾을 수 있습니다 .
새 스타일 클래스의 경우 : isinstance(object, type)
이전 스타일 클래스의 경우 : isinstance(object, types.ClassType)
em, 이전 스타일 클래스의 경우을 사용 types.ClassType하고 있습니다. 여기 types.py 의 코드가 있습니다 .

class _C:
    def _m(self): pass
ClassType = type(_C)