On Wed, May 29, 2019 at 3:47 PM Ricky Teachey <ri...@teachey.org> wrote: > > I look forward to seeing the working example. Hopefully it's clear already, > but: I don't think anybody is yet claiming the descriptor approach is the > "correct" or "best" answer for you. But it will help a lot to demo what you > want, and it also allows you to use your first choice operator, which is =.
Will keep python-ideas and all of you posted. >> >> Problem remains that you cannot pass hdlns.x/y around, x and y are >> really the things you want to pass around. You can pass hdlns in this >> case, but the receiving object has to figure out which signal (x or y) >> to use. > > > If you can pass x around, you can certainly pass hdlns.x around, or something > shorter if you prefer-- ns.x, perhaps. Take my previous example of class C which uses class A and B, let's integrate this ns namespace: class A: def __init__(self, in, o1, o2): self.in = in self.o1 = o1 ; self.o2 = o2 def process(self): # is self.in, self.o1 and self.o2 are still descriptor here to be used? class C: def __init__(self, in, out): ns.in = 0 ns.o1 = 0 ns.o2 = 0 # how should it be passed to A()? a = A(ns.in, ns.o1, ns.o2) # ?? doesn't work ... a = A(ns) # ok this works, but how does class A's instance a figures out is it ns.in/o1/o2 need to be used? a = A(ns, ["in", "o1", "o2"]) # maybe this will do the trick? you see, it starts to melt down ... of course it can work ... just doesn't feel right does it? > The problem of: "the receiving object has to figure out which signal (x or y) > to use" seems easily addressed by creating a Signal class that knows how to > return the Right Thing™ when doing math: > > from numbers import Real # or whatever number abc is appropriate > class Signal(Real): > # override all mathematical operations > > And modify the __set__ method of the SignalBehavior descriptor so it stores a > Signal: > > class SignalBehavior: > ... > def __set__(self,inst,value): > self.inst_dict[inst] = value if isinstance(value,Signal) else > Signal(value) > > Now any math operation you care to do can result in whatever you wish it to > be: > > >>> ns = HDL() > >>> ns.x = 1 > >>> ns.y = ns.x / 2 > >>> ns.z = 8 / ns.y I am not sure if I understood this part, the problem is how a submodule uses this signals, it is pretty clear the top module can use descriptors and hook up the assignment behavior. _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/