github / github/codeql

LGTM.com - false positive: for python methods in diamond inheritance

オープン
#3,450 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
false-positive Python
主要言語
CodeQL
スター
10.1k
フォーク
2.1k
平均マージ
2日 15時間
マージ済み PR(30日)
141

説明

**Description of the false positive**

The short version of the code is:
```
from sympy import AtomicExpr, Basic

assert issubclass(AtomicExpr, Basic)

class _GradedSymbol(AtomicExpr):
pass

class _JoinedPrinterMixin(Basic):
pass

class BasisBaseSymbol(_GradedSymbol, _JoinedPrinterMixin):
pass
```
The resulting inheritance is a diamond,
```
BasisBaseSymbol -> _GradedSymbol -> AtomicExpr -> ... --> Basic
\ /
-> _JoinedPrinterMixin -------------/
```

The query that's failing is [Conflicting attributes in base classes
](https://lgtm.com/rules/7860084/).
LGTM claims that the classes have conflicting values for `_subs`, even though none of my classes define `_subs`, and the two classes which do are already subclasses of each other, so cannot be conflicting.

Error in context: https://lgtm.com/projects/g/pygae/galgebra/snapshot/aeee3eced507e24575c9ff9913abf79ff89ec5d2/files/galgebra/atoms.py?sort=name&dir=ASC&mode=heatmap#x2f5f31388b989ba7:1

The description of that query says:

> When a class subclasses multiple base classes, attribute lookup is performed from left to right amongst the base classes.

This text is not really accurate - the MRO may not be left to right at all, such as `class Child(Grandparent, Parent)`. Perhaps the implementation is therefore also wrong.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。