attrs icon indicating copy to clipboard operation
attrs copied to clipboard

Mypy issue when using classmethods as converters

Open AdrianSosic opened this issue 8 months ago • 0 comments

Hi, I just noticed a typing problem when using factory classmethods as converters. The following code works properly with mypy when calling the constructor directly, but causes problems when calling the equivalent factory method. Perhaps some type hints are too strict?

from __future__ import annotations

from attrs import define, field


@define
class LeContainer:
    attr: int

    @classmethod
    def make(cls, a: int) -> LeContainer:
        return LeContainer(a)


@define
class LeClass:
    # x: LeContainer = field(converter=LeContainer)  <-- This works
    x: LeContainer = field(converter=LeContainer.make)  # <-- This makes mypy complain

Error message:

error: Unsupported converter, only named functions, types and lambdas are currently supported  [misc]

AdrianSosic avatar Jun 02 '25 09:06 AdrianSosic