Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何链接变量,使它们不能同时为真或同时为假等。?_Python_Oop_Variables - Fatal编程技术网

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

Python 如何链接变量,使它们不能同时为真或同时为假等。?,python,oop,variables,Python,Oop,Variables,不确定我的题目是否正确,如果不正确请告诉我 假设我有一个事务列表、字典或元组,其中事务是类的实例。我想记录事务是挂起的、完成的还是取消的,因此我创建布尔值(在类的_init__()内)self.completed和self.cancelled(可以从self.completed和self.cancelled为False推断是否挂起) 当然,一个事务在任何时候都不能超过这三种状态中的一种,那么是否有任何库可以检查一次只有一种状态为真 我可以在每次更改其中一个变量并引发异常时检查此项,但我宁愿保存代

不确定我的题目是否正确,如果不正确请告诉我

假设我有一个事务列表、字典或元组,其中事务是类的实例。我想记录事务是挂起的、完成的还是取消的,因此我创建布尔值(在类的_init__()内)self.completed和self.cancelled(可以从self.completed和self.cancelled为False推断是否挂起)

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

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

我还可以有一个整数值为0、1或2的变量;当0挂起时,1已完成等。但是,这会消除直观的:

    if transaction_a.completed == True: do something

提前谢谢你

我想您可以使用
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.cancelled
将始终与
self.completed
相反

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

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

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