在Python中建模布尔变量

时间:2013-01-30 15:30:28

标签: python

所需的行为是:

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'

2 个答案:

答案 0 :(得分:4)

看看special method names。您可能需要实施更多这些。

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()

答案 1 :(得分:0)

Python中没有变量。只有名称,名称可以绑定到任何类型的任何对象。

请注意,这在Python中完全有效:

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

这并不意味着a引用的对象没有类型,他们这样做,但名称本身没有。

也就是说,您可以编写一个实现__setattr__成员的类,并将某些成员名称限制为特定集合,但我认为这不值得。

当然它不是pythonic。如果您对此感到不舒服,那么您应该转换为更强大的类型语言。