如何链接变量,使它们不能同时为真或两者都是假的等等。

时间:2017-08-18 14:12:43

标签: python oop variables

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

假设我有一个列表,字典或事务元组,其中事务是类的实例。我想记录事务是处于挂起,完成还是取消,所以我创建了布尔(在类的__init __()内)self.completed和self.cancelled(无论是否挂起都可以从self.completed中推断出来)和self.cancelled是假的)

当然,交易在任何时候都不能超过三种状态中的一种,所以是否有任何库可以检查一次只有一种是真的?

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

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

    if transaction_a.completed == True: do something

提前谢谢!

2 个答案:

答案 0 :(得分:1)

您要做的是拥有一个status属性而不是3个布尔值。您可以使用enum来表示不同的状态。然后,您可以生成3 properties查询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

答案 1 :(得分:0)

我想你可以使用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