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 回答