1 """Fix bound method attributes (method.im_? -> method.__?__).
2 """
3 # Author: Christian Heimes
4
5 # Local imports
6 from .. import fixer_base
7 from ..fixer_util import Name
8
9 MAP = {
10 "im_func" : "__func__",
11 "im_self" : "__self__",
12 "im_class" : "__self__.__class__"
13 }
14
15 class ESC[4;38;5;81mFixMethodattrs(ESC[4;38;5;149mfixer_baseESC[4;38;5;149m.ESC[4;38;5;149mBaseFix):
16 BM_compatible = True
17 PATTERN = """
18 power< any+ trailer< '.' attr=('im_func' | 'im_self' | 'im_class') > any* >
19 """
20
21 def transform(self, node, results):
22 attr = results["attr"][0]
23 new = MAP[attr.value]
24 attr.replace(Name(new, prefix=attr.prefix))