1

私はPythonに比較的慣れていません。Time クラスがあり、Time オブジェクトのセットに別の Time オブジェクトのセットが含まれているかどうかを確認したいと考えています。

a = {Time(10,10)} 
print {Time(10,10)}.issubset(a) >> "result is False"
for i in a:
    print i in a >> "result is True"

クラスでは、これらのメソッドを実装しました

def to_min(self):
    return self.h * 60 + self.m
def __cmp__(self, other):
    if isinstance(other, Time):
        if self.to_min() > other.to_min():
            return 1
        else:
            if self.to_min() == other.to_min():
                return 0
            else:
                return -1
def __eq__(self, other):
    if isinstance(other, Time):
        if self.to_min() == other.to_min():
            return True
        else:
            return False
def __gt__(self, other):
    return self.to_min() > other.to_min()
def __ge__(self, other):
    return self.to_min() >= other.to_min()
def __lt__(self, other):
    return self.to_min() < other.to_min()
def __le__(self, other):
    return self.to_min() <= other.to_min()
def __str__ (self):
    return str(self.h) + ":" + str(self.m)
def __hash__(self):
    return self.to_min()

次のコード行を true に出力するには、他に何を実装または変更する必要があるのだろうか。the=at を読みました。containsメソッドがあります。ただし、1 つの Time オブジェクトに他のコンポーネントが含まれているかどうかを確認するつもりはありません。

a = {Time(10,10)} 
print {Time(10,10)}.issubset(a) >>
4

1 に答える 1

0

これを交換しました

 self.to_min() == other.to_min()

これとともに

 self.__hash__() == other.__hash__()

また、整数ではなくブール値を返すようにeqを編集しました。とにかく、誰かが興味を持っているなら、これは完全なコードです:

class Time(object):
'''
classdocs
'''


def __init__(self, h, m):
    if isinstance(h, int) and isinstance(h, int):
        self.m = m
        self.h = h
        if(self.m >= 60):
            self.h += self.m // 60
            self.m %= 60
def __add__(self, m):

    return Time(self.h, self.m + m)
def to_min(self):
    return self.h * 60 + self.m
def __cmp__(self, other):
    print "__cmp__"
    if isinstance(other, Time):
        if self.to_min() > other.to_min():
            return 1
        else:
            if self.__hash__() == other.__hash__():
                return 0
            else:
                return -1
def __eq__(self, other):
    print "__eq__"
    if isinstance(other, Time):
        if self.to_min() == other.to_min():
            return True
        else:
            return False
def __gt__(self, other):
    return self.to_min() > other.to_min()
def __ge__(self, other):
    return self.to_min() >= other.to_min()
def __lt__(self, other):
    return self.to_min() < other.to_min()
def __le__(self, other):
    return self.to_min() <= other.to_min()
def __str__ (self):
    return str(self.h) + ":" + str(self.m)
def __hash__(self):
    print "__hash__"
    return self.to_min()
    # return 1
def __ne__(self, other):
    print "__ne__"
    return not self == other



# a = set([Time(10,10), Time(10,20)])
# b = set([Time(10,10)])
# print a in set([b])
a = {Time(10,10)} 
print {Time(10,10)}.issubset(a) 
# print b.issubset( a)
# for i in a:
#     print i in a
于 2013-07-19T23:32:16.497 に答える