python抽象基类是否应该从object继承

时间:2017-06-15 10:58:04

标签: python python-2.7 inheritance abstract-class

关于abc的标准文档以及我读过的其他教程都使用了定义抽象基类的示例,而不继承自object。

class Foo(object):
    def __getitem__(self, index):
        ...
    def __len__(self):
        ...
    def get_iterator(self):
        return iter(self)

class MyIterable:
    __metaclass__ = ABCMeta

    @abstractmethod
    def __iter__(self):
        while False:
            yield None

过去我总是让我的类继承对象以获得新式的类。我应该和ABC一样吗?

1 个答案:

答案 0 :(得分:3)

var res = gameAndGenres.GroupBy(x => x.game_id) .Select(g => new { game_id = g.Key, genreIds = g.Select( c => c.genre_id) }); var res2 = res.Where(x => genres.Intersect(x.genreIds).Count() == genres.Count()).ToList(); 的元类声明为MyIterable可确保ABCMeta的实例(或更合适地,MyIterable的子类,因为它是一个抽象基类)将是"新"样式。如果您要创建一个MyIterable子类的实例,如下所示,它将表现为一个新的样式类。

MyIterable

如果class SubIterable(MyIterable): def __iter__(self): # your implementation here ... >>> type(SubIterable()) <type '__main__'.MyIterable> 确实是一个&#34; old&#34;样式类,MyIterable将返回type(SubIterable())