У меня есть опыт работы с библиотеками наук о данных или с вызовом методов и атрибутов из классов.Я экспериментирую с манипулированием магическими методами.Я испытываю трудности с получением bool
типов и возвращением их противоположностей.
Я сделал что-то с str
и datetime
объектами, которые работали, но, похоже, не работали с __cmp__
, __lt__
, __eq__
или ` gt ».Вот мой код:
class Opposite:
def __cmp__(self, other):
if other.__class__.__name__ == 'bool':
return other
def __lt__(self, other):
if other.__class__.__name__ == 'bool':
return other
def __eq__(self, other):
if other.__class__.__name__ == 'bool':
return other
def __gt__(self, other):
if other.__class__.__name__ == 'bool':
return other
if __name__=="__main__":
""" test class Compare """
a = 1
b = 1
c = a < b
d = a > b
e = a == b
print("Results:\na\t{}\nb\t{}\nc\t{}\nd\t{}\ne\t{}\n".format(a,b,c,d,e))
print("\nType:\na-type\t{}\nb-type\t{}\nc-type\t{}\nd-type\t{}\ne-type\t{}\n"
.format(type(a),type(b),type(c),type(d),type(e)))
Это печатает следующее:
Results:
a 1
b 1
c False
d False
e True
Type:
a-type <class 'int'>
b-type <class 'int'>
c-type <class 'bool'>
d-type <class 'bool'>
e-type <class 'bool'>
Как видите, результаты такие же, как и при отсутствии использования класса вообще.Я добавил __init__
метод для печати using Opposite
, и он только печатает, что если я создаю экземпляр объекта с чем-то вроде a = Opposite()
.
, я бы хотел ввести что-то вроде a > b
, a < b
,или a == b
и верните противоположное логическое значение, True
или False
, в качестве упражнения.
Я пробовал несколько вещей, таких как помещение методов в созданный мной метод __init__
, который тоже не работал.Я читал об этом и до сих пор не совсем понимаю, как это сделать с логическими, целыми числами и числами с плавающей точкой.Методы, описанные выше, позволяют мне преобразовывать объекты даты и времени в строки с помощью методов __add__
, __radd__
и __rsub__
.
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ
Благодаря вашей помощи у меня появилось лучшее понимание, и я завершил небольшой эксперимент с этим кодом:
class Opposite:
def __init__(self, x):
self._x = x
def __lt__(self, other):
return not self._x < other._x
def __eq__(self, other):
return not self._x == other._x
def __gt__(self, other):
return not self._x > other._x
def __le__(self, other):
return not self._x <= other._x
def __ge__(self, other):
return not self._x >= other._x
def tester(w, x, y, z):
try:
# Original values
a = w < x
b = w > x
c = w == x
d = w <= x
e = w >= x
# Opposite values
f = y < z
g = y > z
h = y == z
i = y <= z
j = y >= z
# Results
k = 'Fail' if a == f else 'Success'
l = 'Fail' if b == g else 'Success'
m = 'Fail' if c == h else 'Success'
n = 'Fail' if d == i else 'Success'
o = 'Fail' if e == j else 'Success'
print('\nComparing {} and {}:\t<\t>\t==\t<=\t>='.format(w, x))
print('Original Values:', end='\t')
print('{0}\t{1}\t{2}\t{3}\t{4}'.format(a, b, c, d, e))
print('Opposite Values:', end='\t')
print('{0}\t{1}\t{2}\t{3}\t{4}'.format(f, g, h, i, j))
print('Comparisons:', end='\t')
print('\t{0}\t{1}\t{2}\t{3}\t{4}'.format(k, l, m, n, o))
except(Exception) as err:
print(err)
if __name__=="__main__":
""" test class Compare """
a = 1
b = 2
c = Opposite(a)
d = Opposite(b)
tester(a, b, c, d)
Эта печатьследующее:
Comparing 1 and 2: < > == <= >=
Original Values: True False False True False
Opposite Values: False True True False True
Comparisons: Success Success Success Success Success