2

望ましい動作は次のとおりです。

In [653]: choice = 'A'

In [654]: not(choice)
Out[654]: 'B'

これを行うことができる堅牢な方法はありますか?現在、私はこれらのような単純なハックを使用しています。

def other(choice):
    if choice == 'A':
        return 'B'
    else:
        return 'A'

In [635]: other('B')
Out[635]: 'A'

d = dict()
d['A'] = 'B'
d['B'] = 'A'

In [652]: d['A']
Out[652]: 'B'
4

2 に答える 2

4

特別なメソッド名を見てください。それらをさらに実装する必要があるかもしれません。

class myBool():
    def __init__(self, val):
        self.value = val

    def __repr__(self):
        return self.value

    def __invert__(self):
        if self.value == 'A':
            return 'B'
        else:
            return 'A'

def main():
    a = myBool('A')
    print(a)
    print(~a)

if __name__ == '__main__':
    main()
于 2013-01-30T15:45:43.703 に答える
0

Pythonには変数はありません。名前だけがあり、名前は任意のタイプの任意のオブジェクトにバインドできます。

これはPythonで完全に有効であることに注意してください。

a = 'hello'
a = 1
a = True
a = 2.2

これは、によって参照されるオブジェクトに型がないことを意味するのではaなく、型がありますが、名前自体にはありません。

そうは言っても、メンバーを実装し、一部のメンバー名を特定のセットに制限するクラスを作成することはできますが、__setattr__それだけの価値はないと思います。

そして確かにそれはpythonicではありません。それが気に入らない場合は、より強力な型付き言語に切り替える必要があります。

于 2013-01-30T15:36:04.077 に答える