boolean (@NotNull PyStructuralType expected, @NotNull PyClassType actual, @NotNull TypeEvalContext context) { if (overridesGetAttr(actual.getPyClass(), context)) { return true; } final Set<String> actualAttributes = actual.getMemberNames(true, context); return actualAttributes.containsAll(expected.getAttributeNames()); }