Angle brackets in Python [duplicate]

2019-05-07 01:57发布

问题:

This question already has an answer here:

  • Difference between __str__ and __repr__? 22 answers

I want to craft packets using scapy. When looking through the IP() class members I came across the following code idiom:

'fieldtype': {

    'frag': <Field (IP,IPerror).frag>, 
    'src': <Field (IP,IPerror).src>, 
    'proto': <Field (IP,IPerror).proto>, 
    'tos': <Field (IP,IPerror).tos>, 
    'dst': <Field (IP,IPerror).dst>, 
    'chksum': <Field (IP,IPerror).chksum>, 
    'len': <Field (IP,IPerror).len>, 
    'options': <Field (IP,IPerror).options>, 
    'version': <Field (IP,IPerror).version>, 
    'flags': <Field (IP,IPerror).flags>, 
    'ihl': <Field (IP,IPerror).ihl>, 
    'ttl': <Field (IP,IPerror).ttl>, 
    'id': <Field (IP,IPerror).id>}, 
    'time': 1465637588.477862, 
    'initialized': 1, 
    'overloaded_fields': {},

I am relatively new to Python. Can someone explain to me what purpose the angle brackets serve in each field type definition?

I have been trying to figure out this myself using the following documentation but got completely stuck.

Scapy 2.3.1

Thanks

回答1:

repr when applied to a Field instance uses the following definition for __repr__ which is the source of the not Python syntax.

def __repr__(self):
    return "<Field (%s).%s>" % (",".join(x.__name__ for x in self.owners),self.name)


标签: python scapy