La nostra applicazione ha set di procedure guidate di moduli complessi. Per evitare la duplicazione del codice ho creato diversi mixin.Ottieni PyCharm per sapere quali classi sono mixate per
Il problema è che PyCharm evidenzia i metodi di mixin con l'errore Unresolved attribute refference
.
Questo è corretto come object
non ha tali metodi. Ma so che questo mixin sarà usato solo con classi speciali. C'è un modo per dire queste informazioni a PyCharm?
Per ora io uso questo approccio:
class MyMixin(object):
def get_context_data(self, **kwargs):
assert isinstance(self, (ClassToBeExtended, MyMixin))
# super.get_context_data is still highlighter,
# as super is considered as object
context = super(MyMixin, self).get_context_data(**kwargs)
context.update(self.get_preview_context())
return context
def get_preview_context(self):
# without this line PyCharm highlights the self.initial_data
assert isinstance(self, (ClassToBeExtended, MyMixin))
return {'needs': (self.initial_data['needs']
if 'type' not in self.initial_data
else '%(needs)s %(type)s' % self.initial_data)}
Mentre questo funziona per alcuni casi come completamento automatico per self.
, non riesce per altri casi come super
. C'è un approccio migliore per ottenere il comportamento desiderato?
P.S .: So che posso disattivare il controllo di riferimento per nome specifico o per l'intera classe, ma non voglio farlo perché non aiuta nei controlli di battitura e nella compilazione automatica.
FWIW, se pycharm non è in grado di risolvere i riferimenti di attributo, sospetto che non sia in grado né di verificare errori di digitazione né di completamento automatico (poiché non ha alcun riferimento all'utilizzo) ... –
'get_context_data (self: ClassToBeExtended) '(python3 ovviamente) sembra funzionare. – gdoumenc