所需的行为是:
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'
答案 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。如果您对此感到不舒服,那么您应该转换为更强大的类型语言。