在Python中,我何时应该使用元类?

6 python oop

我已经完成了这个:Python中的元类是什么?

但是,任何人都可以更具体地解释什么时候我应该使用元类概念,什么时候它非常方便?

假设我有一个类如下:

 class Book(object):
    CATEGORIES = ['programming','literature','physics']
    def _get_book_name(self,book):
        return book['title']
    def _get_category(self, book):
        for cat in self.CATEGORIES:
            if book['title'].find(cat) > -1:
                return cat  
        return "Other"


if __name__ == '__main__':
    b = Book()
    dummy_book = {'title':'Python Guide of Programming', 'status':'available'}
    print b._get_category(dummy_book)
Run Code Online (Sandbox Code Playgroud)

对于这堂课.

在哪种情况下我应该使用元类,为什么它有用?

提前致谢.

the*_*orn 8

当你想的变异可以使用元类为正在创建它.几乎不需要元类,它们很难调试,而且很难理解 - 但偶尔它们可以使框架更易于使用.在我们的600Kloc代码库中,我们使用了7次metaclasses:ABCMeta一次,4x models.SubfieldBase来自Django,两次是元类,使得类可用作Django中的视图.正如@Ignacio所写,如果你不知道你需要一个元类(并考虑了所有其他选项),你不需要元类.

  • 即使你想改变类,一个类装饰器通常更简单,同样强大.只有最先进的操作才能从元类中受益. (5认同)

mus*_*fiq -2

检查链接Meta Class Made Easy了解如何以及何时使用元类。