File tree Expand file tree Collapse file tree 2 files changed +28
-1
lines changed Expand file tree Collapse file tree 2 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -510,7 +510,9 @@ def _verify_disjoint_base(
510
510
if stub .is_final :
511
511
return
512
512
is_disjoint_runtime = _is_disjoint_base (runtime )
513
- if is_disjoint_runtime and not stub .is_disjoint_base :
513
+ # Don't complain about missing @disjoint_base if there are __slots__, because
514
+ # in that case we can infer that it's a disjoint base.
515
+ if is_disjoint_runtime and not stub .is_disjoint_base and not runtime .__dict__ .get ("__slots__" ):
514
516
yield Error (
515
517
object_path ,
516
518
"is a disjoint base at runtime, but isn't marked with @disjoint_base in the stub" ,
Original file line number Diff line number Diff line change @@ -1430,6 +1430,31 @@ class BytesEnum(bytes, enum.Enum):
1430
1430
""" ,
1431
1431
error = None ,
1432
1432
)
1433
+ yield Case (
1434
+ stub = """
1435
+ class HasSlotsAndNothingElse:
1436
+ __slots__ = ("x",)
1437
+ x: int
1438
+
1439
+ class HasInheritedSlots(HasSlotsAndNothingElse):
1440
+ pass
1441
+
1442
+ class HasEmptySlots:
1443
+ __slots__ = ()
1444
+ """ ,
1445
+ runtime = """
1446
+ class HasSlotsAndNothingElse:
1447
+ __slots__ = ("x",)
1448
+ x: int
1449
+
1450
+ class HasInheritedSlots(HasSlotsAndNothingElse):
1451
+ pass
1452
+
1453
+ class HasEmptySlots:
1454
+ __slots__ = ()
1455
+ """ ,
1456
+ error = None ,
1457
+ )
1433
1458
1434
1459
@collect_cases
1435
1460
def test_decorator (self ) -> Iterator [Case ]:
You can’t perform that action at this time.
0 commit comments