|
18 | 18 | from mypy import subtypes
|
19 | 19 |
|
20 | 20 |
|
21 |
| -def analyze_member_access(name: str, typ: Type, node: Context, is_lvalue: bool, |
| 21 | +def analyze_member_access(name: str, |
| 22 | + typ: Type, |
| 23 | + node: Context, |
| 24 | + is_lvalue: bool, |
22 | 25 | is_super: bool,
|
23 | 26 | builtin_type: Callable[[str], Instance],
|
24 | 27 | not_ready_callback: Callable[[str, Context], None],
|
25 |
| - msg: MessageBuilder, override_info: TypeInfo = None, |
| 28 | + msg: MessageBuilder, |
| 29 | + override_info: TypeInfo = None, |
26 | 30 | report_type: Type = None) -> Type:
|
27 | 31 | """Analyse attribute access.
|
28 | 32 |
|
@@ -72,6 +76,11 @@ def analyze_member_access(name: str, typ: Type, node: Context, is_lvalue: bool,
|
72 | 76 | elif isinstance(typ, AnyType):
|
73 | 77 | # The base object has dynamic type.
|
74 | 78 | return AnyType()
|
| 79 | + elif isinstance(typ, NoneTyp): |
| 80 | + # The only attribute NoneType has are those it inherits from object |
| 81 | + return analyze_member_access(name, builtin_type('builtins.object'), node, is_lvalue, |
| 82 | + is_super, builtin_type, not_ready_callback, msg, |
| 83 | + report_type=report_type) |
75 | 84 | elif isinstance(typ, UnionType):
|
76 | 85 | # The base object has dynamic type.
|
77 | 86 | msg.disable_type_names += 1
|
|
0 commit comments