File tree 3 files changed +32
-0
lines changed
3 files changed +32
-0
lines changed Original file line number Diff line number Diff line change @@ -57,6 +57,12 @@ Accessing The Annotations Dict Of An Object In Python 3.10 And Newer
57
57
newer is to call :func: `getattr ` with three arguments,
58
58
for example ``getattr(o, '__annotations__', None) ``.
59
59
60
+ Before Python 3.10, accessing ``__annotations__ `` on a class that
61
+ defines no annotations but that has a parent class with
62
+ annotations would return the parent's ``__annotations__ ``.
63
+ In Python 3.10 and newer, the child class's annotations
64
+ will be an empty dict instead.
65
+
60
66
61
67
Accessing The Annotations Dict Of An Object In Python 3.9 And Older
62
68
===================================================================
Original file line number Diff line number Diff line change @@ -2777,6 +2777,10 @@ Introspection helpers
2777
2777
.. versionchanged :: 3.9
2778
2778
Added ``include_extras `` parameter as part of :pep: `593 `.
2779
2779
2780
+ .. versionchanged :: 3.10
2781
+ Calling ``get_type_hints() `` on a class no longer returns the annotations
2782
+ of its base classes.
2783
+
2780
2784
.. versionchanged :: 3.11
2781
2785
Previously, ``Optional[t] `` was added for function and method annotations
2782
2786
if a default value equal to ``None `` was set.
Original file line number Diff line number Diff line change @@ -415,6 +415,28 @@ class Cbad2(C):
415
415
x : int
416
416
x .y : list = []
417
417
418
+ def test_annotations_inheritance (self ):
419
+ # Check that annotations are not inherited by derived classes
420
+ class A :
421
+ attr : int
422
+ class B (A ):
423
+ pass
424
+ class C (A ):
425
+ attr : str
426
+ class D :
427
+ attr2 : int
428
+ class E (A , D ):
429
+ pass
430
+ class F (C , A ):
431
+ pass
432
+ self .assertEqual (A .__annotations__ , {"attr" : int })
433
+ self .assertEqual (B .__annotations__ , {})
434
+ self .assertEqual (C .__annotations__ , {"attr" : str })
435
+ self .assertEqual (D .__annotations__ , {"attr2" : int })
436
+ self .assertEqual (E .__annotations__ , {})
437
+ self .assertEqual (F .__annotations__ , {})
438
+
439
+
418
440
def test_var_annot_metaclass_semantics (self ):
419
441
class CMeta (type ):
420
442
@classmethod
You can’t perform that action at this time.
0 commit comments