Search code examples
pythonclassmethodspycharmcode-completion

Code completion for defining a method outside of class definition?


I want to use multiple methods outside of classes. How to define a method outside of a class definition is already answered here.

It seems like a small afterthought, but the brackets for autocompletion and arguments disappear as a result, because it is seen as a field now. As I want to create a bulk of methods that are going to be used frequently, it would be nice to have it show the autocompletion and arguments again. Here is an example of what it's showing, I would like it to autocomplete with brackets and the respective arguments, as you can see with the __dir__(self) function. And here is the code:

from dataclasses import dataclass

def get_dap(self):
    pass

@dataclass
class Country:
    ctr_cc: str
    ctr_code: str
    ctr_name: str
    dap = get_dap

@dataclass
class Region(Country):
    reg_code: str
    reg_name: str
    dap = get_dap

dk1 = Region(ctr_cc="DK", ctr_code="DENMARK", ctr_name="Denmark", reg_code="DK1", reg_name="East Denmark")
dk1.get_dap()

I have tried to use some type hinting but I have yet to find a solution.


Solution

  • Thanks to @Anentropic I was able to answer my own question (screenshot with autocompletion):

    from dataclasses import dataclass
    
    class GetMixin:
        def get_dap(self):
            pass
    
    @dataclass
    class Country:
        ctr_cc: str
        ctr_code: str
        ctr_name: str
    
    
    @dataclass
    class Region(GetMixin, Country):
        reg_code: str
        reg_name: str
    
    if __name__ == '__main__':
        dk1 = Region(ctr_cc="DK",
                     ctr_code="DENMARK",
                     ctr_name="Denmark",
                     reg_code="DK1",
                     reg_name="East Denmark")
        dk1.get_dap()
    

    Using a mixin and inheriting it in your preferred classes provides a better method for reuse and allows for autocompletion.