基本的に私はこれをしたい:
obj = 'str'
type ( obj ) == string
私は試した:
type ( obj ) == type ( string )
そしてそれはうまくいきませんでした。
また、他のタイプはどうですか?たとえば、複製できませんでしNoneType
た。
isinstance()
あなたの場合、isinstance("this is a string", str)
が返されTrue
ます。
こちらもお読みください: http://www.canonical.org/~kragen/isinstance/
isinstance
作品:
if isinstance(obj, MyClass): do_foo(obj)
ただし、注意してください。アヒルのように見え、アヒルのように聞こえる場合、それはアヒルです。
編集: None タイプの場合、次のように簡単に実行できます。
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
PSタイプチェックは悪い考えです。
あなたはいつでもtype(x) == type(y)
トリックを使うことができます.where y
is something with known type.
# 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)
多くの場合、特に最近の python では、それを行うためのより良い方法があります。しかし、1 つだけ覚えたい場合は、それを覚えることができます。
この場合、より良い方法は次のとおりです。
# 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 にはのインスタンスが 1 つしかなく、それがNone
. NoneType は例外でよく見られます ( TypeError: 'NoneType' object is unsubscriptable
-- 私にはいつも起こります..) が、コードでそれを参照する必要はほとんどありません。
最後に、fengshaun が指摘しているように、Python での型チェックは必ずしも良い考えではありません。期待する型であるかのように値を使用し、それから生じる例外をキャッチ (または伝播を許可) する方がより Pythonic です。
あなたはとても近いです!string
型ではなくモジュールです。obj
の型を文字列の型オブジェクトと比較したい場合があります。つまり、次のようになりますstr
。
type(obj) == str # this works because str is already a type
または:
type(obj) == type('')
Python 2 では、obj
が Unicode タイプの場合、上記のいずれも機能しないことに注意してください。しませんisinstance()
。これを回避する方法については、この投稿に対する John のコメントを参照してください... 約 10 分間覚えようとしてきましたが、メモリ ブロックが発生していました。
文字列の代わりに str を使用する
type ( obj ) == str
説明
>>> a = "Hello"
>>> type(a)==str
True
>>> type(a)
<type 'str'>
>>>
私はこれがそれをするべきだと思います
if isinstance(obj, str)
Type は特定のクラスでは機能しません。オブジェクトのタイプがわからない場合は、次のように__class__
メソッドを使用します。
>>>obj = 'a string'
>>>obj.__class__ == str
True
この記事も参照してください - http://www.siafoo.net/article/56
型を取得するには、次のように__class__
メンバーを使用します。unknown_thing.__class__
ダックタイピングの話は、ここでは役に立たない。私のアプリケーション コードでは、何かの型を知る必要はありませんが、オブジェクトの型を知る方法があると便利です。単体テストを検証するために、実際のクラスを取得する必要がある場合があります。考えられるすべてのオブジェクトは同じ API を持っていますが、正しいのは 1 つだけであるため、ダックタイピングが邪魔になります。また、ときどき他の人のコードを保守していて、渡されたオブジェクトの種類がわかりません。これは、Python のような動的型付け言語に関する私の最大の問題です。バージョン 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