[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