Ho un design di classe che segue (non è esatto ma puoi farti un'idea):
WRITE_METHODS = ('POST', 'PATCH')
class CanPOST(BasePermission):
def has_permission(self, request, view):
return request.method == WRITE_METHODS[0]
class IsActor(BasePermission):
def has_permission(self, request, view):
return request.user.type == 'actor'
E voglio creare una classe figlio che abbia un comportamento da entrambi. Il mio approccio è:
class ActorCanPost(CanPOST, IsActor):
def has_permission(self, request, view):
return IsActor.has_permission(self, request, view) and /
CanPost.has_permission(self, request, view)
Ci sono casi in cui voglio usare CanPOST e IsActor come autorizzazioni standalone.
Secondo la mia comprensione, se entrambe le classi genitore hanno lo stesso nome di metodo,
La MRO di Python risolve il metodo del genitore più a sinistra. Ma nel mio caso
Voglio utilizzare has_permission()
da entrambi i genitori.
Dal momento che sto chiamando esplicitamente i metodi padre, l'ereditarietà non mi sta facendo molto bene qui. Ma poi, la mia classe bambino ha bisogno di un comportamento da entrambi i genitori. È un design valido? Come potrei migliorarlo, renderlo più significativo?