class OnOff(bool): def __str__(self): if self: return 'On' else: return 'Off'
5
2
boolとまったく同じように機能するが、「True」または「False」ではなく「On」または「Off」を出力する変数を作成する最良の方法は何ですか? 現在、プログラムは「Color:True」を印刷していますが、「Color:On」はより意味があります。
記録のために、最初に bool`を継承する
OnOff`クラスを作成しようとしました:
class OnOff(bool): def __str__(self): if self: return 'On' else: return 'Off'
コメントから、「bool」はシングルトンであることがわかりました。これが惨めに失敗した理由です。
Traceback (most recent call last): class OnOff(bool): TypeError: Error when calling the metaclass bases type 'bool' is not an acceptable base type
12 Answer
18
print(" Off "、" On ")[value]`も動作します( `(False、True)==(0,1)
)
10
def Color(object): def __init__(self, color_value=False): self.color_value = color_value def __str__(self): if self.color_value: return 'On' else: return 'Off' def __cmp__(self, other): return self.color_value.__cmp__(other.color_value)
これはあなたにとってはやり過ぎかもしれませんが。 :)
5
私のお気に入りのトリックは、boolを使用して配列のインデックスを作成することです。
return "Color: {0}".format(['Off','On'][has_color])
警告は、値が「False」、「True」、「0」、または「1」でなければならないことです。 他に何かがある場合は、まずブール値に変換する必要があります。
4
print "On" if color else "Off" # Python 2.x print ("On" if color else "Off") # Python 3.x
3
TrueとFalseはシングルトンです。 PythonにはTrueオブジェクトとFalseオブジェクトが1つだけあります。 結果として、それらから継承しようとすると問題が発生します。 (それらはそのように使用されることを意図していませんでした)。
論理的および/または操作をオーバーロードして、本当にブール型のオブジェクトを作成できないようにすることはできません。 常にPythonのboolに戻ります。
だからしないでください。
値をTrueおよびFalseとして印刷したくない場合は、それらに対して直接printを呼び出さないでください。 印刷は、迅速で汚れた出力用です。 さらに何かをしたいなら、それはあなたにもっと仕事をする必要があるでしょう。 この場合、必要なのはToOnOff関数だけです。
1
現在、https://stackoverflow.com/questions/3687109#3687134 [Rahul’s code]に基づいてこのソリューションを使用しています。
class OnOff(object): def __init__(self, value): self._value = value def __str__(self): if self._value: return 'On' else: return 'Off' def __cmp__(self, other): return self._value.__cmp__(other)
`cmp`関数を変更して、オブジェクトがブールと比較できるようにし、その他のマイナーなものも変更しました。 Rahulへの完全なクレジット。
0
mybool = {True: 'On', False: 'Off'} mybool[True] == 'On' mybool[False] == 'Off'
0
「print」を台無しにしたくない場合…
class BoolHack(object): def __init__(self): from sys import stdout self.realout = stdout def write(self, text): if text == 'False': text = 'Off' elif text == 'True': text = 'On' self.realout.write(text) import sys sys.stdout = BoolHack() print "Hello world" # ==> Hello world print 1 # ==> 1 print True, 10 # ==> On 10 print False # ==> Off print "True hack" # ==> True hack
WARNING Do not use in real production code! This is only for making 回答のセットが完了しました。
`print`はオブジェクトに対してstr()を呼び出して印刷し、その後に文字列を標準出力に配置します… そのため、オブジェクトのタイプをチェックすることはできません。 しかし、「False」または「True」を単一の文字列として印刷することは非常にまれなので、非常に特殊なケースでは機能する可能性があります。
0
class Color: def __init__(self,C): if C==True: self.col='On' else: self.col='Off' def __cmp__(self,other): return self.col
0