2017-08-18 6 views
-2

私の質問のタイトルが正しいかどうかわからない、そうでない場合は教えてください。変数をリンクして、両方とも真であることも、両方が偽でないこともできません。

私は、トランザクションがクラスのインスタンスであるトランザクションの辞書、またはタプルを持っていると言います。トランザクションが保留中か完了済みかキャンセル済みかを記録したいので、クラスの__init __()内でブーリアンを作成し、self.completedとself.cancelled(保留中かどうかをself.completed self.cancelleded False)

もちろん、トランザクションは3つの状態のいずれか1つではありません。したがって、一度に1つだけが真であることを確認するライブラリはありますか?

変数のいずれかを変更して例外を発生させるたびにこれを確認できますが、コードの行を保存することになります。

また、0,1,2の整数値を持つ変数を持つこともできます。 0が保留中、1が完了しました。しかし、直感的に解消されます。

if transaction_a.completed == True: do something 

ありがとうございます!

+2

:あなたはその後、status属性を照会3 propertiesそのことができますか? – mauve

+1

あなたは正確に何を望みを明確にしてください。あなたがすでにこれを達成しようとしたことも。 – error

+0

申し訳ありませんが、私は間違いなく質問を終える前に先に投稿しました。 – Frimlinso

答えて

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 
1

ではなく、3つのブールの単一status属性を持つことです。 enumを使用して、さまざまな状態を表すことができます。彼らは関係なく、なぜあなたは2つの独立変数が必要ないものを、互いの反対になることはありませつもりなら

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 
関連する問題