답변:
더 나은 : inspect.isclass
기능을 사용하십시오 .
>>> import inspect
>>> class X(object):
... pass
...
>>> inspect.isclass(X)
True
>>> x = X()
>>> isinstance(x, X)
True
>>> y = 25
>>> isinstance(y, X)
False
type(whatever)
항상 클래스 인 객체를 반환 하므로이 검사는 중복됩니다. 그렇지 않은 경우 인스턴스화 whatever
할 수있는 방법이 없으므로 처음부터 확인을 수행 할 수 없었습니다.
type(snakemake.utils)
반환 <class 'module'>
하고 아직 inspect.isclass(snakemake.utils)
반환합니다 False
.
snakemake.util
모듈이 클래스가 아니기 때문 입니까?
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))
import types
types.ClassType
파이썬 3에서는 더 이상 필요하지 않으며 제거됩니다.
In [8]: class NewStyle(object): ...: pass ...: In [9]: isinstance(NewStyle, (type, types.ClassType)) Out[9]: True
isinstance(object, type)
. 객체가 좋아하는 것으로 int
, list
, str
, 등은 또한 당신이 구별이 사용할 수 있도록 클래스 사용자 정의 클래스 파이썬에서 정의 및 내장 된 C 코드에 정의 된 클래스 .
>>> class X(object):
... pass
...
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True
'class Old:pass' 'isinstance(Old, type) == False'
,하지만 inspect.isclass(Old) == True
.
isinstance(X, type)
클래스 True
인지 아닌지 여부를 반환 합니다 .X
False
S. Lott's answer
4 년이 지난 것 같습니다.
Foo : 클래스는 이전 스타일 클래스라고하고 X (object) 클래스는 new 스타일 클래스라고합니다.
이 체크 파이썬 오래 된 스타일과 새로운 스타일 클래스의 차이점은 무엇입니까? . 새로운 스타일을 권장합니다. "읽기에 대한 통일 유형 및 클래스 "
가장 간단한 방법은 inspect.isclass
가장 투표가 많은 답변에 게시 된대로 사용 하는 것입니다.
구현 세부 사항은 python2 inspect 및 python3 inspect 에서 찾을 수 있습니다 .
새 스타일 클래스의 경우 : isinstance(object, type)
이전 스타일 클래스의 경우 : isinstance(object, types.ClassType)
em, 이전 스타일 클래스의 경우을 사용 types.ClassType
하고 있습니다. 여기 types.py 의 코드가 있습니다 .
class _C:
def _m(self): pass
ClassType = type(_C)
벤자민 피터슨 (Benjamin Peterson) inspect.isclass()
은이 직업 의 사용에 대해 옳 습니다. 그러나 내장 함수 issubclass를 사용하여 Class
객체가 특정 Class
적이고 따라서 암시 적으로 a 인지 테스트 할 수 있습니다 . 유스 케이스에 따라 더 파이썬 일 수 있습니다.Class
from typing import Type, Any
def isclass(cl: Type[Any]):
try:
return issubclass(cl, cl)
except TypeError:
return False
다음과 같이 사용할 수 있습니다 :
>>> class X():
... pass
...
>>> isclass(X)
True
>>> isclass(X())
False
inspect.isclass
반환에True
검사 할 개체가있는 경우 클래스 인스턴스 사용inspect.isclass(type(Myclass()))