关于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一样吗?
答案 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())