On Tue, 14 Aug 2018 10:58:17 +0200, Frank Millman wrote: >> > I have an abstract class ClassA with a number of concrete >> > sub-classes. ClassA has a method which invokes 'self.method_b()' >> > which is defined separately on each sub-class. Pylint complains that >> > "Instance of 'ClassA' has no 'method_b' member". [...]
> I do mean a lot of methods, not classes. I don't have any problem adding > the lines. It is just that, before I starting using pylint, it had not > occurred to me that there was any problem with my approach. If an > experienced python programmer was reviewing my code, would they flag it > as 'bad style'? *shrug* I wouldn't necessarily call it *bad*, but perhaps *not-quite good* style. I think its fine for a small projects and quick scripts, especially if they're written and maintained by a single person for their own use. Perhaps not so much for large projects intended for long-term use with continual development. If there really are a lot of such missing methods, I'd consider writing something like this: class A: def __init__(self, ...): ... # === process abstract methods en masse === for name in "method_a method_b method_c method_d".split(): @abstractmethod def inner(self): raise NotImplementedError inner.__name__ = name # This is okay, writing to locals works inside the class body. locals()[name] = inner del inner, name # Clean up the class namespace. def concrete_method_a(self): ... although to be honest I'm not sure if that would be enough to stop PyLint from complaining. -- Steven D'Aprano "Ever since I learned about confirmation bias, I've been seeing it everywhere." -- Jon Ronson -- https://mail.python.org/mailman/listinfo/python-list