In Python 2.x when you want to mark a method as abstract, you can define it like so:
class Base: def foo(self): raise NotImplementedError("Subclasses should implement this!")
Then if you forget to override it, you get a nice reminder exception. Is there an equivalent way to mark a field as abstract? Or is stating it in the class docstring all you can do?
At first I thought I could set the field to NotImplemented, but when I looked up what it’s actually for (rich comparisons) it seemed abusive.
Advertisement
Answer
Yes, you can. Use the @property
decorator. For instance, if you have a field called “example” then can’t you do something like this:
class Base(object): @property def example(self): raise NotImplementedError("Subclasses should implement this!")
Running the following produces a NotImplementedError
just like you want.
b = Base() print b.example