Message 338621 - Python tracker (original) (raw)

It is common to create read-only properties with the '@property' decoration but the existing help() output doesn't annotate them as such.

One way to go is to annotate each one separately:

| ---------------------------------------------------------------------- | Data descriptors inherited from _IPAddressBase: |
| compressed (read-only property) <== NEW ANNOTATION | Return the shorthand version of the IP address as a string. |
| exploded (read-only property) <== NEW ANNOTATION | Return the longhand version of the IP address as a string. |
| reverse_pointer (read-only property) <== NEW ANNOTATION | The name of the reverse DNS pointer for the IP address, e.g.: | >>> ipaddress.ip_address("127.0.0.1").reverse_pointer | '1.0.0.127.in-addr.arpa' | >>> ipaddress.ip_address("2001:db8::1").reverse_pointer | '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'

Another way to go is to break the data descriptor section into two sections --- isolate those that define set or delete from those that don't.

For example, given this code:

class A:
    'Variety of descriptors and method'

    __slots__ = '_w', '_x'

    def __init__(self, w: int, x: str):
        'initializer'
        self.w = w
        self.x = x

    @classmethod
    def cm(cls, u):
        'do something with u'
        return cls(u * 4)

    @staticmethod
    def sm(v):
        'do something with v'
        return v * 3

    @property
    def rop(self):
        'computed field'
        return self._w * 2

    @property
    def wandr(self):
        'managed attribute'
        return self._w

    @wandr.setter
    def wandr(self, w):
        self._w = w

Produce this help output:

Help on class A in module main:

class A(builtins.object)
 |  A(w: int, x: str)
 |  
 |  Variety of descriptors and method
 |  
 |  Methods defined here:
 |  
 |  __init__(self, w: int, x: str)
 |      initializer
 |  
 |  ----------------------------------------------------------------------
 |  Class methods defined here:
 |  
 |  cm(u) from builtins.type
 |      do something with u
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  sm(v)
 |      do something with v
 |  
 |  ----------------------------------------------------------------------
 |  Read-only descriptors defined here:        <== NEW HEADING
 |  
 |  rop
 |      computed field
 |  
 |  ----------------------------------------------------------------------
 |  Mutable data descriptors defined here:     <== NEW HEADING AND SECTION    
 |  
 |  wandr
 |      managed attribute