如何链接变量,使它们不能同时为真或都为假等?



不确定我的问题标题是否正确,请告诉我是否不正确。

假设我有一个事务列表、字典或元组,其中事务是类的实例。我想记录交易是待处理、完成还是取消,所以我创建了布尔值(在类的 __init__(( 内(self.done 和 self.cancel(无论它是否待处理都可以从 self.complete 和 self.cancel 中推断出来是 False(

当然,一个事务在任何时候都不能超过三种状态中的一种,那么是否有任何库可以检查一次只有一个为真?

每次更改其中一个变量并引发异常时,我都可以检查这一点,但我宁愿保存代码行。

我也可以有一个整数值为 0、1 或 2 的变量;其中 0 表示挂起,1 表示完成等。但是,这摆脱了直觉:

if transaction_a.completed == True: do something

提前谢谢你!

您要做的是使用单个status属性而不是 3 个布尔值。您可以使用枚举来表示不同的状态。然后,可以创建 3 个属性来查询status属性:

from enum import Enum, auto
class Status(Enum):
pending = auto()
completed = auto()
cancelled = auto()
class Transaction:
def __init__(self):
self.status = Status.pending
@property
def is_pending(self):
return self.status == Status.pending
@property
def is_completed(self):
return self.status == Status.completed
t = Transaction()
print(t.is_pending) # True
t.status = Status.completed
print(t.is_pending) # False
print(t.is_completed) # True

我想你可以使用这样的xor来做到这一点:

class myclass(object):
"""docstring for myclass"""
def __init__(self, completed=True):
self.completed = completed
self.canceled  = self.opposite(self.completed)
def opposite(self, v):
return v^v

这样,无论你做什么,self.canceled总是与self.completed相反。

>>> cl = myclass(True)
>>> print cl.completed
True
>>> print cl.canceled
False

最新更新