python - Ensure a Method is Overridden -


i want ensure class derived class overrides methods. if not overridden want raise notimplementederror possible after compiling begins, rather when 1 of methods called.

i've found can metaclass so:

class metabaseclass(type):     # list of method names should overridden     to_override = ['method_a', 'method_b']      def __init__(cls, name, bases, dct):         methodname in cls.to_override:             if methodname not in dct:                  raise notimplementederror('{0} must override {1} method'.format(name, methodname))         super(metabaseclass, cls).__init__(name, bases, dct)  class baseclass(object):      __metaclass__ = metabaseclass      def method_a(self):         pass      def method_b(self):         pass 

this raise error @ class definition time if method_a or method_b aren't overridden class derived baseclass.

is there better way this?

why not use abstractmethod.

from abc import abstractmethod, abcmeta class baseclass(object):      __metaclass__ = abcmeta      @abstractmethod     def method_a(self):         pass     @abstractmethod     def method_b(self):         pass  class inherit(baseclass):     pass 

you error user tries instantiate inherit class.

i = inherit() typeerror: can't instantiate abstract class inherit abstract methods method_a, method_b 

Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -