Python에서 오브젝트 타입을 비교하는 방법
기본적으로 이 작업을 수행합니다.
obj = 'str'
type ( obj ) == string
나는 시도했다.
type ( obj ) == type ( string )
효과가 없었어요
리른른른 른른른른 른른??예를 들어, 저는 복제하지 못했습니다.NoneType
.
isinstance()
ㅇㅇㅇㅇㅇㅇ는isinstance("this is a string", str)
True
.
http://www.canonical.org/~kragen/isinstance/도 읽어보실 수 있습니다.
첫째, 모든 유형의 비교를 피하십시오.그것들은 아주 아주 드물게 필요합니다.함수의 파라미터 유형을 체크하는 데 도움이 되는 경우도 있습니다.그것도 드문 경우입니다.잘못된 유형의 데이터가 있으면 예외가 발생하므로, 그것만 있으면 됩니다.
모든 기본 변환 함수는 유형 함수와 동일하게 매핑됩니다.
type(9) is int
type(2.5) is float
type('x') is str
type(u'x') is unicode
type(2+3j) is complex
몇 가지 다른 경우가 있습니다.
isinstance( 'x', basestring )
isinstance( u'u', basestring )
isinstance( 9, int )
isinstance( 2.5, float )
isinstance( (2+3j), complex )
그건 그렇고 이런 종류의 확인은 필요 없어요None은 NoneType의 유일한 인스턴스입니다.None 객체는 Singleton입니다.[없음]을 체크합니다.
variable is None
BTW, 일반적으로 위의 내용을 사용하지 마십시오.일반적인 예외와 파이썬 고유의 자연스러운 다형성을 사용합니다.
isinstance
삭제:
if isinstance(obj, MyClass): do_foo(obj)
하지만, 만약 그것이 오리처럼 생겼다면, 그리고 그것이 오리처럼 들린다면, 그것은 오리라는 것을 명심하세요.
편집: 없음 유형의 경우 다음 작업을 수행할 수 있습니다.
if obj is None: obj = MyClass()
다른 유형의 경우 유형 모듈을 확인하십시오.
>>> import types
>>> x = "mystring"
>>> isinstance(x, types.StringType)
True
>>> x = 5
>>> isinstance(x, types.IntType)
True
>>> x = None
>>> isinstance(x, types.NoneType)
True
추신. 타이프 체크는 좋지 않은 생각이에요.
하실 수 .type(x) == type(y)
trick, wherey
이미 알려진 타입의 물건입니다.
# check if x is a regular string
type(x) == type('')
# check if x is an integer
type(x) == type(1)
# check if x is a NoneType
type(x) == type(None)
많은 경우, 특히 최근의 비단뱀에게는 더 나은 방법이 있습니다.하지만 한 가지만 기억하고 싶다면, 그걸 기억할 수 있어요.
이 경우 더 나은 방법은 다음과 같습니다.
# check if x is a regular string
type(x) == str
# check if x is either a regular string or a unicode string
type(x) in [str, unicode]
# alternatively:
isinstance(x, basestring)
# check if x is an integer
type(x) == int
# check if x is a NoneType
x is None
해 주세요.개개NoneType
즉 python, python입니다.None
(NoneType)을 볼 수 TypeError: 'NoneType' object is unsubscriptable
코드로 없습니다코드로 참조할 필요는 없습니다.
마지막으로, 풍선이 지적했듯이, 비단뱀의 활자를 확인하는 것이 항상 좋은 생각은 아니다.값을 예상하는 유형인 것처럼 사용하고 그 결과 발생하는 예외를 포착(또는 전파 허용)하는 것이 더 비호조적입니다.
거의 다 왔어! string
타입이 아닌 모듈입니다. 게 것 같아요.obj
의 타입 「」, 「」)에 ,str
:
type(obj) == str # this works because str is already a type
대체 방법:
type(obj) == type('')
Python 2의 , Python 2의 경우,obj
【유니코드】상기 어느 쪽도 동작하지 않습니다. 안 될 것이다.isinstance()
이 문제를 해결하는 방법에 대해서는, 이 투고에 대한 존의 코멘트를 참조해 주세요.정도 메모리 요! 10분 !
isinstance(object, type)
위와 같이 정답을 알고 있으면 사용하기 쉽다.type
,190),
isinstance('dog', str) ## gives bool True
그러나 더 난해한 물체의 경우, 이것은 사용하기 어려울 수 있습니다.예를 들어 다음과 같습니다.
import numpy as np
a = np.array([1,2,3])
isinstance(a,np.array) ## breaks
하지만 이런 묘기를 부릴 수 있습니다.
y = type(np.array([1]))
isinstance(a,y) ## gives bool True
변수변수)를 하는 것을 합니다.y
를 들어, 「」를 참조해 ).type(np.array())
하여 를 사용합니다isinstance
문자열 대신 str 사용
type ( obj ) == str
설명.
>>> a = "Hello"
>>> type(a)==str
True
>>> type(a)
<type 'str'>
>>>
왜냐하면 너는 글을 써야 하기 때문이다.
s="hello"
type(s) == type("")
type은 인스턴스를 받아들이고 해당 유형을 반환합니다.이 경우 두 인스턴스의 유형을 비교해야 합니다.
프리엠프티브체크를 실행할 필요가 있는 경우는 타입보다 지원되는 인터페이스를 체크하는 것이 좋습니다.
같은 인터페이스를 구현하기 때문에 전혀 문제가 없는 전혀 다른 유형의 인스턴스를 가질 수 있다는 사실에도 불구하고 코드가 특정 유형의 인스턴스를 원한다는 사실 이외에는 이 유형은 많은 것을 말해주지 않습니다.
예를 들어, 이 코드가 있다고 가정합니다.
def firstElement(parameter):
return parameter[0]
예를 들어 다음과 같습니다.나는 이 코드가 태플만 받아들이기를 원한다.
import types
def firstElement(parameter):
if type(parameter) != types.TupleType:
raise TypeError("function accepts only a tuple")
return parameter[0]
이로 인해 이 루틴의 재사용 가능성이 감소합니다.목록, 문자열 또는 numpy.array를 전달하면 작동하지 않습니다.더 나은 방법이 있을 거야
def firstElement(parameter):
if not (hasattr(parameter, "__getitem__") and callable(getattr(parameter,"__getitem__"))):
raise TypeError("interface violation")
return parameter[0]
그래도 프로토콜이 충족되지 않으면 매개 변수[0]가 예외를 발생시킵니다.물론 부작용을 방지하거나 실패하기 전에 호출할 수 있는 콜에서 회복할 필요가 없는 경우는 제외합니다.(스튜피드) 예를 들어 요점을 설명하겠습니다.
def firstElement(parameter):
if not (hasattr(parameter, "__getitem__") and callable(getattr(parameter,"__getitem__"))):
raise TypeError("interface violation")
os.system("rm file")
return parameter[0]
이 경우 코드에서는 system() 콜을 실행하기 전에 예외가 발생합니다.인터페이스 체크가 없으면 파일을 삭제하고 예외를 발생시킬 수 있습니다.
용 i i i i를 쓴다.type(x) == type(y)
예를 들어 배열인지 확인하는 경우:
type( x ) == type( [] )
문자열 검사:
type( x ) == type( '' ) or type( x ) == type( u'' )
[없음(None)]에 체크하는 경우, use는 다음과 같습니다.
x is None
이제 어느 정도 된 것 같다.
if isinstance(obj, str)
특정 클래스에서 유형이 작동하지 않습니다. 「유형」을 합니다.__class__
다음과 같이 합니다.
>>>obj = 'a string'
>>>obj.__class__ == str
True
다음 문서도 참조해 주세요.http://www.siafoo.net/article/56
을 취득하려면 , 를 합니다.__class__
「」와 )unknown_thing.__class__
오리타입을 논하는 것은 완전히 좋은 질문에 대한 답이 아니기 때문에 여기서는 소용이 없다.내 어플리케이션 코드에서는 어떤 타입을 알 필요는 없지만 오브젝트의 타입을 알 수 있는 방법이 있으면 편리합니다.유닛 테스트를 검증하기 위해 실제 클래스가 필요할 수 있습니다.가능한 모든 객체가 동일한 API를 가지지만, 1개만 맞기 때문에 덕 타이핑이 방해가 됩니다.그리고 가끔 다른 사람의 코드를 유지하는데 내가 어떤 종류의 물건을 전달받았는지 모르겠어.이것은 파이썬과 같은 역동적인 유형의 언어에서 가장 큰 문제입니다.버전 1은 매우 쉽고 빠르게 개발할 수 있습니다.버전 2는 특히 버전 1을 작성하지 않은 경우 골칫거리입니다.따라서 작성하지 않은 함수로 작업할 때 파라미터의 유형을 알아야 하는 경우가 있습니다.그래서 어떤 메서드를 호출할 수 있는지 알 수 있습니다.
여기서부터가__class__
파라미터는 편리합니다.그것이 (내가 아는 한) 오브젝트의 타입을 취득하는 최선의 방법(아마도 유일한 방법일 것이다).
체크 레벨의 클래스를 비교할 수 있습니다.
#!/usr/bin/env python
#coding:utf8
class A(object):
def t(self):
print 'A'
def r(self):
print 'rA',
self.t()
class B(A):
def t(self):
print 'B'
class C(A):
def t(self):
print 'C'
class D(B, C):
def t(self):
print 'D',
super(D, self).t()
class E(C, B):
pass
d = D()
d.t()
d.r()
e = E()
e.t()
e.r()
print isinstance(e, D) # False
print isinstance(e, E) # True
print isinstance(e, C) # True
print isinstance(e, B) # True
print isinstance(e, (A,)) # True
print e.__class__ >= A, #False
print e.__class__ <= C, #False
print e.__class__ < E, #False
print e.__class__ <= E #True
언급URL : https://stackoverflow.com/questions/707674/how-to-compare-type-of-an-object-in-python
'programing' 카테고리의 다른 글
왜 잠기지 않는 거죠? 다른 사용자가 업데이트를 하지 못하게 하는 거죠? (0) | 2022.11.22 |
---|---|
Javascript 초에서 분, 초 (0) | 2022.11.22 |
어레이를 병합하고 키를 유지하는 방법 (0) | 2022.11.22 |
jQuery는 요소와 관련된 모든 CSS 스타일을 가져올 수 있습니까? (0) | 2022.11.22 |
스크롤 후 요소가 표시되는지 확인하는 방법 (0) | 2022.11.22 |