我对数据科学图书馆或从类中调用方法和属性有更多的了解。我正在尝试使用魔术方法。我很难获得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
答案 0 :(得分:1)
如果您要返回比较得出的布尔值的取反,则可以执行类似的操作
class T:
def __init__(self, x):
self._x = x
def __lt__(self, other):
return not self._x < other._x
t1 = T(1)
t2 = T(2)
print(t1 < t2) #False
请注意,在比较self._x < other._x
中,您使用的是int类的__lt__
方法。