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 @@ -2233,6 +2233,10 @@ Introspection helpers
2233
2233
.. versionchanged :: 3.9
2234
2234
Added ``include_extras `` parameter as part of :pep: `593 `.
2235
2235
2236
+ .. versionchanged :: 3.10
2237
+ Calling ``get_type_hints() `` on a class no longer returns the annotations
2238
+ of its base classes.
2239
+
2236
2240
.. function :: get_args(tp)
2237
2241
.. function :: get_origin(tp)
2238
2242
Original file line number Diff line number Diff line change @@ -406,6 +406,28 @@ class Cbad2(C):
406
406
x : int
407
407
x .y : list = []
408
408
409
+ def test_annotations_inheritance (self ):
410
+ # Check that annotations are not inherited by derived classes
411
+ class A :
412
+ attr : int
413
+ class B (A ):
414
+ pass
415
+ class C (A ):
416
+ attr : str
417
+ class D :
418
+ attr2 : int
419
+ class E (A , D ):
420
+ pass
421
+ class F (C , A ):
422
+ pass
423
+ self .assertEqual (A .__annotations__ , {"attr" : int })
424
+ self .assertEqual (B .__annotations__ , {})
425
+ self .assertEqual (C .__annotations__ , {"attr" : str })
426
+ self .assertEqual (D .__annotations__ , {"attr2" : int })
427
+ self .assertEqual (E .__annotations__ , {})
428
+ self .assertEqual (F .__annotations__ , {})
429
+
430
+
409
431
def test_var_annot_metaclass_semantics (self ):
410
432
class CMeta (type ):
411
433
@classmethod
You can’t perform that action at this time.
0 commit comments