boolean (@NotNull PyClass cls, boolean inherited) { if (inherited) { if (isDecoratedAsDynamic(cls, false)) { return true; } for (PyClass base : cls.getAncestorClasses(myTypeEvalContext)) { if (base != null && isDecoratedAsDynamic(base, false)) { return true; } } } else { final String docString = cls.getDocStringValue(); if (docString != null && docString.contains("@DynamicAttrs")) { return true; } } return false; }