source

변수가 클래스인지 확인하는 방법

manycodes 2022. 12. 25. 09:44
반응형

변수가 클래스인지 확인하는 방법

변수가 클래스(인스턴스가 아님)인지 어떤지를 확인하는 방법을 알고 싶습니다.

이 기능을 사용하려고 했습니다.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

반응형