enforce icon indicating copy to clipboard operation
enforce copied to clipboard

Forward references on classes

Open obeleh opened this issue 6 years ago • 0 comments

I know this is similar to #45 but bare with me, it is different

I have this situation:

from enforce import runtime_validation


class A:

    @runtime_validation
    def clone(self) -> 'A':
        return A()

A().clone()

which results in:

NameError: name 'A' is not defined

I've noticed that Forward references are actually implemented but in this case the reference is followed at "compile time" of class A and at that point class A doesn't exist yet.

Basically you want to use a late bind like this:

from enforce import runtime_validation


def late_bind(method):
    checked_meth = None

    def wrap(*args, **kwargs):
        nonlocal checked_meth
        if checked_meth is None:
            checked_meth = runtime_validation(method)
        return checked_meth(*args, **kwargs)

    return wrap


class B:

    @late_bind
    def clone(self) -> 'B':
        return 'bla'


B().clone()

obeleh avatar Jul 27 '18 10:07 obeleh