변수가 클래스인지 확인하는 방법
변수가 클래스(인스턴스가 아님)인지 어떤지를 확인하는 방법을 알고 싶습니다.
이 기능을 사용하려고 했습니다.isinstance(object, class_or_type_or_tuple)
어떤 타입의 수업이 될지 모르겠어요.
예를 들어, 다음 코드에서는
class Foo: pass
isinstance(Foo, **???**) # i want to make this return True.
"로 대체하려고 했다.class
"라고 말했지만, 저는 깨달았습니다.class
는 python 키워드입니다.
더 좋은 기능: 기능을 사용합니다.
>>> import inspect
>>> class X(object):
... pass
...
>>> inspect.isclass(X)
True
>>> x = X()
>>> isinstance(x, X)
True
>>> inspect.isclass(x)
False
>>> class X(object):
... pass
...
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True
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))
isinstance(X, type)
돌아가다True
한다면X
클래스 및False
아니라면.
이 검사는 Python 2.x 및 Python 3.x와 호환됩니다.
import six
isinstance(obj, six.class_types)
이는 기본적으로 adrea_crotti 응답과 동일한 체크를 수행하는 래퍼 함수입니다.
예:
>>> import datetime
>>> isinstance(datetime.date, six.class_types)
>>> True
>>> isinstance(datetime.date.min, six.class_types)
>>> False
벤자민 피터슨은 사용법에 대해 옳다.inspect.isclass()
이 일을 위해.단, 테스트 할 수 있는 것은,Class
객체는 특정입니다.Class
, 따라서 암묵적으로Class
내장 함수 issubclass를 사용합니다.사용 예에 따라 더 많은 버마닉이 발생할 수 있습니다.
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
클래스 Foo:는 오래된 스타일 클래스, 클래스 X(개체):는 새로운 스타일 클래스라고 불립니다.
Python에서 이전 스타일과 새 스타일 클래스의 차이점은 무엇입니까? 새로운 스타일을 권장합니다."유형 및 클래스 통합"에 대해 확인
가장 간단한 방법은 사용하는 것이다.inspect.isclass
가장 많은 답변에 올라오셨듯이
구현에 대한 자세한 내용은 python2 inspect 및 python3 inspect에서 확인할 수 있습니다.
새로운 스타일의 클래스:isinstance(object, type)
구식 클래스의 경우:isinstance(object, types.ClassType)
em, 오래된 스타일의 수업에서는types.ClassType
, 타입의 코드를 나타냅니다.py:
class _C:
def _m(self): pass
ClassType = type(_C)
다른 방법으로 확인할 수 있습니다.
import inspect
class cls():
print(None)
inspect.isclass(cls)
참고 자료: https://www.kite.com/python/docs/inspect.isclass
음.inspect.isclass
나한텐 안 돼, 대신 이거 해봐
class foo:
pass
var = foo()
if str(type(var)).split(".")[0] == "<class '__main__":
print("this is a class")
else:
print(str(type(var)).split(".")[0])
그러니까 기본적으로는type(var)
이<class 'a type'>
예:<class 'int'
하지만, 언제var
클래스입니다.그것은 다음과 같이 나타납니다.<class '__main__.classname'>
그래서 끈을 나눠서<class '__main__
를 사용하여 비교합니다.if
스트링이 딱 맞으면 클래스입니다.
(시스템에 따라) 간단한 테스트는 변수에 __module_ 속성이 있는지 확인하는 것입니다.
if getattr(my_variable,'__module__', None):
print(my_variable, ".__module__ is ",my_variable.__module__)
else:
print(my_variable,' has no __module__.')
int, float, dict, list, str 등에는 __float__가 없습니다.
여기에는 이미 몇 가지 유효한 솔루션이 있지만, 다음 솔루션이 있습니다.
>>> import types
>>> class Dummy: pass
>>> type(Dummy) is types.ClassType
True
언급URL : https://stackoverflow.com/questions/395735/how-to-check-whether-a-variable-is-a-class-or-not
'source' 카테고리의 다른 글
데이터베이스에서 생성된 열 값을 JPA 및 최대 절전 모드에서 읽기 전용 필드로 정의하는 방법은 무엇입니까? (0) | 2022.12.25 |
---|---|
vuex의 상태를 기반으로 보기를 전환하려면 어떻게 해야 합니까? (0) | 2022.12.25 |
현재 시각을 YYY-MM-DD HH로 취득하는 방법:MI: Sec.Millisecond 포맷(Java) (0) | 2022.12.25 |
어떻게 두 줄을 숫자처럼 추가할 수 있죠? (0) | 2022.12.25 |
HTML 파일의 JavaScript 위치 (0) | 2022.12.25 |