간단한 클래스를 가정하지 않습니다 확인?어떻게 변수가 클래스 객체 또는
간단한 해결책 :
if str(type(m)) == "<type 'classobj'>":
# do something
하지만 난 그걸 확인하는 적어도 하나 개의 고전적인 방법이 생각합니다.
간단한 클래스를 가정하지 않습니다 확인?어떻게 변수가 클래스 객체 또는
간단한 해결책 :
if str(type(m)) == "<type 'classobj'>":
# do something
하지만 난 그걸 확인하는 적어도 하나 개의 고전적인 방법이 생각합니다.
2.x에서 클래스 개체는 type
(새 스타일 클래스) 또는 classobj
(클래식 클래스) 일 수 있습니다. type
유형은 내장되어 있지만 classobj
유형은 없습니다. 그래서, 어떻게 얻습니까? 이것이 바로 types
모듈의 용도입니다.
isinstance(MyClass, (types.TypeType, types.ClassType))
3.X에서, 당신은 너무 고전 클래스에 대해 걱정할 필요가 없습니다 :
isinstance(MyClass, type)
을 직접 유형을 비교하려는 경우에도이 비교해서는 안됩니다 모든 개체는 str
입니다. 비교 :
>>> class MyClassicClass:
... pass
>>> str(type(MyClassicClass)) == "<type 'classobj'>"
True
>>> str("<type 'classobj'>") == "<type 'classobj'>"
True
당신은 거의 언제나 직접 객체를 비교할 수
이>>> type(MyClassicClass) == types.ClassType
True
>>> "<type 'classobj'>" == types.ClassType
False
(그리고 당신이 정말로 어떤 이유로 문자열 표현을 비교해야 않는 매우 드문 경우에, 당신은 repr
을 원하는
이게 당신이 찾고 있는게 있나요?
>>> class A(object):
... pass
>>> isinstance(A, type)
True
>>> isinstance("asd", type)
False
하지만 개체에서 상속 된 클래스에만 적용됩니다.
나는 이것이 OP가 찾고있는 것이 아니라고 확신한다. – mgilson
새로운 스타일의 클래스 (예 : object
에서 명시 적으로 파생되거나 내재적으로 Python 3에서 파생 됨)의 형식은 classobj
이 아닙니다. 구식 수업 만 classobj
입니다. MyClass
이 type
의 인스턴스 인 경우 모든 새로운 스타일의 클래스는 같이 쓸로 예를 클래스에 대한 그래서, 당신은 간단하게 확인할 수있는 모든 새로운 스타일의 클래스가 object
에서 파생되기 때문에
isinstance(MyClass, type)
당신은 또한 수
이issubclass(MyClass, object)
내가 무리를 줄 것이다 : 않는 클래스의 타입이없는 경우
type(MyClass) == type
이 실패합니다하지만 메타 클래스. 물론 유스 케이스가있을 수 있습니다.
구식 클래스가 필요한지 확인하려면 types
모듈을 가져 와서 types.ClassType
을 사용하거나 이전 스타일의 클래스를 선언하고 테스트 할 클래스가 있는지 확인하십시오 동일한 유형 :
class OldStyleClass:
pass
OldStyleClass = type(OldStyleClass)
isinstance(MyClass, OldStyleClass)
(개체를 인쇄하는 방법을 결정하려는 경우) 다음이 작동 :
def is_class(o):
return hasattr(o, '__dict__')
위의 코드는'm '이 새 스타일 클래스이기 때문에'type (m)'에''를 인쇄하지 않습니다. ''이 인쇄됩니다. 클래식 클래스에 대해서만''를 얻을 것입니다. –
abarnert