| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- from functools import cache
- class A:
- def __init__(self, x):
- self._x = x
- @property
- def x(self):
- return self._x
-
- def __call__(self, b):
- return self.x + b
-
- a = A(1)
- assert a.x == 1
- assert a(2) == 3
- class B:
- def __init__(self):
- self._x = 1
- def _x_setter(self, v):
- self._x = v
- B.x = property(
- lambda self: self._x,
- B._x_setter
- )
- b = B()
- assert b.x == 1
- b.x = 2
- assert b.x == 2
- @cache
- def fib(n):
- # print(f'fib({n})')
- if n < 2:
- return n
- return fib(n-1) + fib(n-2)
- assert fib(32) == 2178309
- def wrapped(cls):
- return int
- @wrapped
- @wrapped
- @wrapped
- @wrapped
- class A:
- def __init__(self) -> None:
- pass
- assert A('123') == 123
- # validate the decorator order
- res = []
- def w(x):
- res.append('w')
- return x
- def w1(x):
- res.append('w1')
- return x
- def w2(x):
- res.append('w2')
- return x
- @w
- @w1
- @w2
- def f():
- pass
- f()
- assert res == ['w2', 'w1', 'w']
|