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
|