Python 让PyCharm知道混合课程的目的
我们的应用程序有一组复杂的表单向导。为了避免代码重复,我创建了几个mixin 问题是PyCharm突出显示了带有Python 让PyCharm知道混合课程的目的,python,django,ide,pycharm,mixins,Python,Django,Ide,Pycharm,Mixins,我们的应用程序有一组复杂的表单向导。为了避免代码重复,我创建了几个mixin 问题是PyCharm突出显示了带有未解析属性引用的mixin方法。 这是正确的,因为对象没有此类方法。但是我知道这个mixin将只用于特殊类。有没有办法把这个信息告诉PyCharm 目前,我使用这样的方法: class MyMixin(object): def get_context_data(self, **kwargs): assert isinstance(self, (ClassToBe
未解析属性引用的mixin方法。
这是正确的,因为对象
没有此类方法。但是我知道这个mixin将只用于特殊类。有没有办法把这个信息告诉PyCharm
目前,我使用这样的方法:
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)}
虽然这在某些情况下有效,如self.
的自动完成,但在其他情况下(如super
)无效。是否有更好的方法来实现期望的行为
注:我知道我可以禁用特定名称或整个类的引用检查,但我不想这样做,因为这对拼写检查和自动完成没有帮助。如果您正在创建Mixin,例如ClassSub,它是ClassSuper的子类,您可以通过以下方式实现Mixin:
class Mixin1(ClassSuper):
pass
class Mixin2(ClassSuper):
pass
然后像这样使用它们:
class ClassSub(Mixin1, Mixin2):
pass
这样,我在Django中为模型使用了一些mixin。此外,还使用类似的模式(给出了实际上是混合的模型)。基本上,这样您就不必继承ClassSuper
,因为它“包含”在您的每个混音中
最重要的是,PyCharm的工作方式就像一个符咒。您可以通过PyCharm了解所期望的类的类型
class DictMixin(object):
def megamethod(
self, # type: dict
key
):
return self.get(key)
它仍然无法与其他类型的处理方式进行比较。
PyCharm在评估它时很懒散,而且只有在第一次处理self
时才会这样做。
在访问mixin的属性时也有点棘手-self,#type:dict | DictMixin
适用于我的一个类,但不适用于我的测试代码。
在中,您应该能够使用。FWIW,如果pycharm无法解析属性引用,我怀疑它也无法检查拼写错误或自动完成(因为它没有可使用的引用).get\u context\u data(self:ClassToBeExtended)
(当然是python3)似乎工作正常。