Skip to main content

You are not logged in. Your edit will be placed in a queue until it is peer reviewed.

We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.

Required fields*

3
  • Thanks for reminding me about the abc module. About the second part of your answer: I like its simplicity, compared to having a formal capabilities class. But then, when using the object it ends up doing duck typing, right? You cannot ask for a specific capability using a common API call. I am writing a framework, and thus I am not very comfortable with forcing framework users to do duck typing on the framework objects Commented Sep 21, 2019 at 9:15
  • @mguijarr It certainly makes sense to think about what API would be most convenient for the users of the API – Python makes duck typing easy, and you can assert certain shapes up front with calls like assert hasattr(foo, 'some_property'). But sometimes explicit methods are better. I've added an example for querying available capabilities in an MI-safe manner. Which approach is appropriate will depend on the exact purpose of your framework. I tend towards low-magic, more-explicit approaches. Commented Sep 21, 2019 at 9:54
  • +1 for the reference of new syntax for python 3.8 (always good to learn new things). In this case, inheritance is used to implement a mixin approach. In order to ensure capabilities - in the inheritance scenario you can use type checking - like isinstanceof which makes it a bit clearer to define intention. Composition is probably more appropriate to express a scenario for multiple unrelated capabilities, but I would go with a pulgin approach, providing a cleaner way to expand (which will require less boilerplate code than the example provided). In any case, love the answer. Commented Jun 20, 2020 at 14:25