Я только что обнаружил поразрядное дополнение унарной операции в Python через этот вопрос и пытался с фактическим приложением для него, а если нет, определить, безопасно ли вообще перегружать оператора (путем переопределения метода __invert__
) для других целей. Пример, приведенный в вопросе, терпит неудачу с TypeError
, а ссылка кажется довольно запугивающей. Здесь некоторые возились, чтобы увидеть ~
в использовании:
from bitstring import BitArray
x = 7
print(~x)
# -8
print(BitArray(int=x, length=4).bin)
# '0111'
print(BitArray(int=~x, length=4).bin)
# '1000'
print(~~True, ~~False)
# 1 0
for i in range(-100, 100):
assert i + ~i == -1
assert i ^ ~i == -1
assert bool(i) == ~~bool(i)
Есть ли примеры действительных случаев использования этого оператора, о которых я должен знать? И даже если есть, вообще ли приемлемо переопределять этот оператор для типов, отличных от int
?