summaryrefslogtreecommitdiff
path: root/tests/functional/i/invalid/invalid_overridden_method.py
blob: d81a7882bd67cbefe1fc8e5f9791fcd51fa1d8c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# pylint: disable=missing-docstring,too-few-public-methods,disallowed-name,invalid-name,unused-argument
import abc


class SuperClass(metaclass=abc.ABCMeta):
    @property
    @abc.abstractmethod
    def prop(self):
        pass

    @abc.abstractmethod
    async def async_method(self):
        pass

    @abc.abstractmethod
    def method_a(self):
        pass

    @abc.abstractmethod
    def method_b(self):
        pass

class ValidDerived(SuperClass):
    @property
    def prop(self):
        return None

    async def async_method(self):
        return None

    def method_a(self):
        pass

    def method_b(self):
        pass

class InvalidDerived(SuperClass):
    def prop(self):  # [invalid-overridden-method]
        return None

    def async_method(self): # [invalid-overridden-method]
        return None

    @property
    def method_a(self): # [invalid-overridden-method]
        return None

    async def method_b(self): # [invalid-overridden-method]
        return None

class Property:

    @property
    def close(self):
        pass


class PropertySetter(Property):

    @property
    def close(self):
        pass

    @close.setter
    def close(self, attr):
        return attr

    @close.deleter
    def close(self):
        return None


class AbstractProperty:

    @property
    @abc.abstractmethod
    def prop(self):
        return


# https://github.com/pylint-dev/pylint/issues/4368
# Decrator functions with a nested property decorator should still be
# inferred as property.

def my_property(func):
    @property
    def _wrapper(self):
        pass
    return _wrapper

def not_a_property(func):
    def _wrapper(self):
        pass
    return _wrapper

def multiple_returns(func):
    def _wrapper(self):
        pass
    if foobar:  # pylint: disable=undefined-variable
        return False
    return _wrapper

class A:
    @property
    def foo(self):
        return True

    @property
    def bar(self):
        return True

    @property
    def bar2(self):
        return True

class B(A):
    @my_property
    def foo(self):
        return False

    @not_a_property
    def bar(self):  # [invalid-overridden-method]
        return False

    @multiple_returns
    def bar2(self):  # [invalid-overridden-method]
        return False