`permission_required` should be an attribute on the view, but there should also be a method, `get_permission_required` that returns the attribute (or `ImproperlyConfigured` if the attribute isn't provided). This method gives developers a place to override the default of just returning a string, perhaps they need to calculate the required permission on the calling of the view; it's not static.

Anywhere that you need to get the permission, instead of `self.permission_required`, you'd always call `self.get_permission_required()` instead.