MCPcopy Index your code
hub / github.com/python/mypy / check_final_implicit_def

Method check_final_implicit_def

mypy/semanal.py:3808–3827  ·  view source on GitHub ↗

Do basic checks for final declaration on self in __init__. Additional re-definition checks are performed by `analyze_lvalue`.

(self, s: AssignmentStmt)

Source from the content-addressed store, hash-verified

3806 return True
3807
3808 def check_final_implicit_def(self, s: AssignmentStmt) -> None:
3809 """Do basic checks for final declaration on self in __init__.
3810
3811 Additional re-definition checks are performed by `analyze_lvalue`.
3812 """
3813 if not s.is_final_def:
3814 return
3815 lval = s.lvalues[0]
3816 assert isinstance(lval, RefExpr)
3817 if isinstance(lval, MemberExpr):
3818 if not self.is_self_member_ref(lval):
3819 self.fail("Final can be only applied to a name or an attribute on self", s)
3820 s.is_final_def = False
3821 return
3822 else:
3823 assert self.function_stack
3824 if self.function_stack[-1].name != "__init__":
3825 self.fail("Can only declare a final attribute in class body or __init__", s)
3826 s.is_final_def = False
3827 return
3828
3829 def store_final_status(self, s: AssignmentStmt) -> None:
3830 """If this is a locally valid final declaration, set the corresponding flag on `Var`."""

Callers 1

visit_assignment_stmtMethod · 0.95

Calls 3

is_self_member_refMethod · 0.95
failMethod · 0.95
isinstanceFunction · 0.85

Tested by

no test coverage detected