[Python-Dev] Arbitrary attributes on funcs and methods

Jeremy Hylton jeremy@cnri.reston.va.us
Wed, 12 Apr 2000 13:51:32 -0400 (EDT)


>>>>> "GMcM" == Gordon McMillan <gmcm@hypernet.com> writes:
      [please imagine that the c is raised]

  BAW> Think about my proposal this way: it actually removes a
  BAW> restriction.
  [Jeremy Hylton wrote:]
  >>  I think this is really the crux of the matter!  The proposal
  >> removes a useful restriction.
  >> 
  >> The alternatives /F suggested seem clearer to me that sticking
  >> new attributes on functions and methods.  Three things I like
  >> about the approach: It affords an opportunity to be very clear
  >> about how the attributes are intended to be used.  I suspect it
  >> would be easier to describe with a static type system.

  GMcM> Having to be explicit about the method <-> regex / rule would
  GMcM> severely damage SPARK's elegance. It would make Tim's doctest
  GMcM> useless.

Do either of these examples modify the __doc__ attribute?  I am happy
to think of both of them as elegant abuses of the doc string.  (Not
sure what semantics I mean for "elegant abuse" but not pejorative.)
I'm not arguing that we should change the language to prevent them
from using doc strings.

Fred and I were just talking, and he observed that a variant of Python
that included a syntactic mechanism to specify more than one attribute
(effectively, a multiple doc string syntax) might be less
objectionable than setting arbitrary attributes at runtime.  Neither
of us could imagine just what that syntax would be.

  >> It prevents confusion and errors that might result from
  >> unprincipled use of function attributes.

  GMcM> While I'm sure I will be properly shocked and horrified when
  GMcM> you come up with an example, in my naivety, I can't imagine
  GMcM> what it will look like ;-).

It would look really, really bad ;-).  I couldn't think of a good
example, so I guess this is a FUD argument.  A rough sketch, though,
would be a program that assigned attribute X to all functions that
were to be used in a certain way.  If the assignment is a runtime
operation, rather than a syntactic construct that defines a static
attribute, it would be possible to accidentally assign attribute X to
a function that was not intended to be used that way.  This connection
between a group of functions and a particular behavior would depend
entirely on some runtime magic with settable attributes.

Jeremy