继承自Python';s和override uu str__

继承自Python';s和override uu str__,python,inheritance,overriding,Python,Inheritance,Overriding,我有兴趣做一些类似Django对列表所做的事情,例如: 在django shell 这似乎在普通Python shell中工作: In [54]: a=TimeEntryList(('1-2','2-3')) In [58]: print a 1-2;2-3 In [59]: str(a) Out[59]: '1-2;2-3' 然而,在我的应用程序中,TimeEntryList实例实际上是定义如下的TimeEntry对象的列表: class TimeEntry(object): d

我有兴趣做一些类似Django对列表所做的事情,例如:

在django shell 这似乎在普通Python shell中工作:

In [54]: a=TimeEntryList(('1-2','2-3'))
In [58]: print a
1-2;2-3

In [59]: str(a)
Out[59]: '1-2;2-3'
然而,在我的应用程序中,
TimeEntryList
实例实际上是定义如下的
TimeEntry
对象的列表:

class TimeEntry(object):

    def __init__(self, start, end):
        self.start = start
        self.end = end
        #self.duration = (self.end - self.start).seconds / 3600.0

    @property
    def duration(self):
        return (self.end - self.start).seconds / 3600.0

    @duration.setter
    def duration(self, value):
        self._duration = value

    def __str__(self):
        return '{} - {} '.format(dt.strftime(self.start, '%H:%M'),
                                 dt.strftime(self.end, '%H:%M'),)
当我打印单个条目时,一切正常:

>>> print checker.entries[0]
08:30 - 11:00 
当我尝试切片时,结果不同:

>>>print self.entries[0:2]
[<TimePortal.semantikCheckers.TimeEntry object at 0x93c7a6c>, <TimePortal.semantikCheckers.TimeEntry object at 0x93d2a4c>]
我知道这给出了期望的结果:

[str(i) for i in self.entries[:2]]

然而,我在这里的目的是学习一种新技术,而不一定要使用我已经知道的东西

您需要覆盖
TimeEntry
\uuuu repr\uuu
(而不是更改列表实现)。关于
\uuuu repr\uuuu
\uuu str\uuu
之间的区别,您可以在此处找到解释:


您需要覆盖
时间项的
\uuu repr\uuu
(而不是更改列表实现)。关于
\uuuu repr\uuuu
\uuu str\uuu
之间的区别,您可以在此处找到解释:


\uuuuu repr\uuuuuu=\uuuuuu str\uuuuuuuuuuuuuu__unicode字符__unicode\uuuuu=\uuuuuu str\uuuuuu
谢谢!我确实覆盖了
TimeEntriesList
\uuuu repr\uuuu
,但解决方案是覆盖
TimeEntry
\uu repr\uuu
!谢谢我确实覆盖了
TimeEntriesList
\uuuu repr\uuuu
,但解决方案是覆盖
TimeEntry
\uu repr\uuu
>>>print self.entries[0:2]
[<TimePortal.semantikCheckers.TimeEntry object at 0x93c7a6c>, <TimePortal.semantikCheckers.TimeEntry object at 0x93d2a4c>]
['08:30 - 11:00 ', '11:00 - 12:30 ']
[str(i) for i in self.entries[:2]]