fork download
  1. #!python3
  2. import dis
  3.  
  4. class Test:
  5. def frob(self):
  6. pass
  7.  
  8. obj = Test()
  9.  
  10. def a():
  11. getattr(obj, 'frob')
  12.  
  13. def b():
  14. obj.frob
  15.  
  16. def c():
  17. obj.frob()
  18.  
  19. def d():
  20. frob = obj.frob
  21. frob()
  22.  
  23. def print_dis(fn):
  24. print(fn.__name__)
  25. dis.dis(fn)
  26. print('=' * 40)
  27.  
  28. for fn in a, b, c, d:
  29. print_dis(fn)
Success #stdin #stdout 0.04s 10336KB
stdin
Standard input is empty
stdout
a
 11           0 LOAD_GLOBAL              0 (getattr)
              3 LOAD_GLOBAL              1 (obj)
              6 LOAD_CONST               1 ('frob')
              9 CALL_FUNCTION            2 (2 positional, 0 keyword pair)
             12 POP_TOP
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE
========================================
b
 14           0 LOAD_GLOBAL              0 (obj)
              3 LOAD_ATTR                1 (frob)
              6 POP_TOP
              7 LOAD_CONST               0 (None)
             10 RETURN_VALUE
========================================
c
 17           0 LOAD_GLOBAL              0 (obj)
              3 LOAD_ATTR                1 (frob)
              6 CALL_FUNCTION            0 (0 positional, 0 keyword pair)
              9 POP_TOP
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE
========================================
d
 20           0 LOAD_GLOBAL              0 (obj)
              3 LOAD_ATTR                1 (frob)
              6 STORE_FAST               0 (frob)

 21           9 LOAD_FAST                0 (frob)
             12 CALL_FUNCTION            0 (0 positional, 0 keyword pair)
             15 POP_TOP
             16 LOAD_CONST               0 (None)
             19 RETURN_VALUE
========================================