[Baypiggies] puzzle: binding invocation context for a function call during a class declaration

Zachary Collins recursive.cookie.jar at gmail.com
Fri Dec 31 21:25:10 CET 2010


You're trying to create more complicated symantics than is necessary
to solve this problem.

How about
class Foo (Concept):
  things_i_am = [A, B]

?

2010/12/31 Bill Janssen <janssen at parc.com>:
> I'm puzzling out how one would ape a declarative language in Python.
> For instance, take a language that has declarations like
>
>  concept Foo {
>    is-a A;
>    is-a B;
>    part-of X;
>
>    public int counter;
>    public analogue bar;
>  }
>
>  expression Bletch {
>
>    expresses Foo;
>
>    counter = 3;
>  }
>
> where "concept", "public", "is-a", "part-of", "int", "analogue",
> "expression", and "expresses" are all keywords.
>
> Since it's largely declarative, I'd naturally express it in Python as a
> set of class declarations:
>
>  from mylang import is_a, part_of, Concept, Expression, attribute, public, analogue, expresses
>
>  class Foo (Concept):
>
>    is_a(A);
>    is_a(B);
>    part_of(X);
>
>    counter = attribute(public, int)
>    bar = attribute(public, analogue)
>
>  class Bletch (Expression):
>
>    expresses(Foo)
>    counter = 3
>
> Now, my question is, how can I capture the invocation context of a
> function, so that I can know that "is_a(A)" is being called as part of
> the definition of class "Foo"?  Do functions called during the
> evaluation of a class leave their return result somewhere, for instance,
> so that I could define a metaclass to do something with that result?
>
> Right now, I'm using the fragile workaround of
>
>  _relationships = []
>  def _store_relationship (x, rel):
>      primary = inspect.stack()[2][0].f_code.co_name
>      _relationships.append((primary, rel, x))
>  is_a = lambda x: _store_relationship(x, "is-a")
>
> If I was willing to use Python 3, I could use class decorators instead,
> I suppose.  But I'd like to nest these declarations inside the class
> definition if I can.
>
> Any ideas would be appreciated.
>
> Bill
> _______________________________________________
> Baypiggies mailing list
> Baypiggies at python.org
> To change your subscription options or unsubscribe:
> http://mail.python.org/mailman/listinfo/baypiggies
>


More information about the Baypiggies mailing list