2015-04-17 7 views
-1

Пример установки метакласса на LoggingType, который я заметил на своем рабочем месте.Практический пример определения использования метакласса, например, установки его в ABCMeta или LoggingType

import logging as _logging 
class SomeClass(object): 
    __metaclass__ = _logging.LoggingType 

Вот пример, который я видел за ABCMeta набор для __metaclass__

Я хочу знать практическое преимущество, если их какой-либо пример установки ABCMeta в метаклассе, как показано ниже: от docs

from abc import ABCMeta 

class MyABC: 
    __metaclass__ = ABCMeta 

мне на мой вопрос звучит, как воспользоваться

register(subclass) 

    Register subclass as a “virtual subclass” 

Как мы можем извлечь из этого выгоду?

Если вы нашли, что мой вопрос повторяется, напишите ссылку!

ответ

0

абстрактные базовые классы являются формой интерфейса проверки более строгим, чем отдельные hasattr() проверки для конкретных методов. Определив абстрактный базовый класс, вы можете определить общий API для набора подклассов . Эта возможность особенно полезна в ситуациях, когда сторонняя компания будет предоставлять приложениям, например плагинам , но также может помочь вам при работе с большой командой или с большой базой кода, на которой хранятся все классы в вашей голове на то же время сложно или невозможно.

Ссылка: http://pymotw.com/2/abc/