Nasza aplikacja ma zestaw złożonych kreatorów formularzy. Aby uniknąć powielania kodu, stworzyłem kilka mixinów.Pobierz PyCharm, aby dowiedzieć się, jakie klasy są mixin dla
Problem polega na tym, że PyCharm zwraca uwagę na metody mixin z błędem Unresolved attribute refference
.
To prawda, ponieważ object
nie ma takich metod. Ale wiem, że ten mixin będzie używany tylko w klasach specjalnych. Czy istnieje sposób na przekazanie tej informacji do PyCharm?
Na razie używam takiego podejścia:
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)}
Chociaż to działa dla niektórych przypadkach, takich jak autouzupełnianie dla self.
, to nie dla innych przypadkach, takich jak super
. Czy istnieje lepsze podejście do osiągnięcia pożądanego zachowania?
P.S .: Wiem, że mogę wyłączyć sprawdzanie referencji dla konkretnej nazwy lub całej klasy, ale nie chcę tego robić, ponieważ nie pomoże to w sprawdzaniu literówek i autouzupełnianiu.
FWIW, jeśli pycharm nie może rozpoznać odniesień do atrybutów, podejrzewam, że nie będzie on również w stanie sprawdzić ani pod kątem literówek, ani autouzupełniania (ponieważ nie ma odniesienia do użycia) ... –
'get_context_data (self: ClassToBeExtended) '(python3 oczywiście) wydaje się działać. – gdoumenc