7

プリミティブ型の場合、if in : boolean チェックを使用できます。しかし、in 構文を使用してクラス メンバの存在を確認すると、NameError 例外が発生します。Pythonで例外なくチェックする方法はありますか? それとも、ブロックを除いてtryで囲む唯一の方法ですか?

これが私のサンプルコードです。

class myclass:
    i = 0
    def __init__(self, num):
        self.i = num

mylist = [1,2,3]
if 7 in mylist:
    print "found it"
else:
    print "7 not present"  #prints 7 not present


x = myclass(3)
print x.i       #prints 3

#below line NameError: name 'counter' is not defined
if counter in x:
    print "counter in x"
else:
    print "No counter in x"
4

4 に答える 4

17

使用できますhasattr

if hasattr(x, 'counter'):
    # whatever
于 2013-07-11T10:57:09.133 に答える
2

演算子__contains__を使用して、クラスに含まれる属性を報告する関数をクラスに作成できます。in

class myclass:

    def __init__(self, num):
        self.i = num

    def __contains__(self, attribute_name):
        return hasattr(self, attribute_name)

その後、(ほぼ)コードと同じようにうまく機能します。

x = myclass(3)
print x.i       #prints 3

# prints 'No counter in x'
if 'counter' in x:
    print "counter in x"
else:
    print "No counter in x"

属性自体ではなく、属性名の文字列を渡す必要があることに注意してください。

于 2013-07-11T11:08:32.770 に答える