Lichen

tests/name_attribute.py

1027:dd0745ab8b8a
5 months ago Paul Boddie Reordered GCC arguments to prevent linking failures. Someone decided to change the GCC invocation or linking semantics at some point, meaning that libraries specified "too early" in the argument list no longer provide the symbols required by the program objects, whereas specifying them at the end of the argument list allows those symbols to be found and obtained.
     1 import operator     2      3 class C:     4     def f(self): pass     5      6 def name(x):     7     print x.__name__     8     print x.__parent__.__name__     9     print str(x)    10     11 def attrname(x):    12     print x.f.__name__    13     print x.f.__parent__.__name__    14     print str(x.f)    15     16 c = C()    17 print c.__name__                        # C    18 print c.__parent__.__name__             # __main__    19 print str(c)                            # <__main__.C instance>    20 print C.__name__                        # C    21 print C.__parent__.__name__             # __main__    22 print str(C)                            # __main__.C    23 print c.f.__name__                      # f    24 print c.f.__parent__.__name__           # C    25 print str(c.f)                          # __main__.C.f    26 print C.f.__name__                      # f    27 print C.f.__parent__.__name__           # C    28 print str(C.f)                          # __main__.C.f    29     30 name(c)                                 # C    31                                         # __main__    32                                         # <__main__.C instance>    33 name(C)                                 # C    34                                         # __main__    35                                         # __main__.C    36 attrname(c)                             # f    37                                         # C    38                                         # __main__.C.f    39 attrname(C)                             # f    40                                         # C    41                                         # __main__.C.f    42 name(c.f)                               # f    43                                         # C    44                                         # __main__.C.f    45 name(C.f)                               # f    46                                         # C    47                                         # __main__.C.f    48     49 # If it were defined, operator.__name__ would be module.    50     51 print operator.__name__                 # operator    52     53 # If it were defined, operator.add.__name__ would be function.    54     55 print operator.add.__name__             # add    56 print operator.add.__parent__.__name__  # operator.binary