Skip to content

Commit 82dc1dc

Browse files
Fixed Expr.__setattr__ for subclasses (dask#11845)
1 parent b2a4a21 commit 82dc1dc

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

dask/_expr.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def __setattr__(self, name: str, value: Any) -> None:
176176
object.__setattr__(self, name, value)
177177
return
178178
try:
179-
params = object.__getattribute__(type(self), "_parameters")
179+
params = type(self)._parameters
180180
operands = object.__getattribute__(self, "operands")
181181
operands[params.index(name)] = value
182182
except ValueError:

dask/tests/test_expr.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,26 @@
55
from dask._expr import Expr
66

77

8-
def test_setattr():
9-
class MyExpr(Expr):
10-
_parameters = ["foo", "bar"]
8+
class MyExpr(Expr):
9+
_parameters = ["foo", "bar"]
10+
11+
12+
class MyExpr2(MyExpr):
13+
# A subclass that inherits parameters
14+
pass
1115

16+
17+
def test_setattr():
1218
e = MyExpr(foo=1, bar=2)
1319
e.bar = 3
1420
assert e.bar == 3
1521
with pytest.raises(AttributeError):
1622
e.baz = 4
23+
24+
25+
def test_setattr2():
26+
e = MyExpr2(foo=1, bar=2)
27+
e.bar = 3
28+
assert e.bar == 3
29+
with pytest.raises(AttributeError):
30+
e.baz = 4

0 commit comments

Comments
 (0)