On 4 November 2010 19:01, Stefan Behnel <[email protected]> wrote: > Brett Calcott, 04.11.2010 07:47: >> On 4 November 2010 16:19, Robert Bradshaw wrote: >>> On Wed, Nov 3, 2010 at 8:51 PM, Brett Calcott wrote: >>>> Is this possible? >>>> x = member_property(self.obj.x) >>>> y = getset_property(self.obj.getY, self.obj.setY) >>>> (the names of these need work I agree) >>>> >>>> But I take it that the general idea would be able to roll your own >>>> when there was some repetitive thing you needed to do, so up to you >>>> what you passed. >>>> >>>> For example, the obj pointer in some of the classes I am currently >>>> wrapping can sometimes be set to NULL. So in many cases the property >>>> access needs to check that first, and raise an exception. If I could >>>> write my own getset_with_check_property(...), that would be very cool. >>> >>> If you need more than something simple, is the >>> >>> property x: >>> def __get__(self): >>> [some logic here] >>> return result >>> >>> too verbose for you? We're not trying to be perl with magic one-liners. >> >> I think we've lost the context of my original question. I'm wrapping a >> C++ library. If I just had to write one of these functions, then >> indeed trying to do it as a one-liner would be silly. But I'm wrapping >> lots of them, and this means I'm just cutting and pasting code, and >> then replacing names. When I find myself doing that, I think: there >> has to be a better way. The problem with perl one-liners is not that >> they are short, but that they are often obscure. But a concise and >> obvious one line mapping from a C++ member (or member functions) to a >> python property would be clearer, more concise, and easier to modify. >> It isn't so much the verbosity that is the problem (though brevity >> along with clarify is surely a good thing), it is the robotic >> repetition of code that I'm opposed to. > > You may have missed my other e-mail, but to put it a bit clearer, there are > three levels where Cython can provide support: > > 1) map an expression or class field to a property > > This is what we were previously discussing in this thread, well in the > context of your original question. > > 2) map a pair of setters and getters to a property > > This can be done using Python's builtin property() type and further > optimised (or enabled for C/C++ functions/methods) by Cython. > > 3) map more complex things to properties > > Use the existing property syntax in Cython. It's a bit verbose for some > special cases, but usually, special cases are not special enough to break > the rules, unless practicality really beats purity. Point 1) above may or > may not be seen as such a case. > > IMHO, only point 1) is worth discussing as it appears to require new > syntax. 2) simply needs an implementation and 3) is usable today. >
That is nice and clear. So I started talking about 1, but I've wandered into talking about 3. That seems right. But I think Dag's suggestion made me think that these cases were really not so different. As I understand it, all of the cases we're talking about can currently be handled by the existing property syntax. Dag's suggestion was to add a specific function (not a syntax addition) to enable case 1 (above). I thought that something more flexible could be defined that both enabled 1, and also let users do 3 more easily themselves. Case 2 would be another form of the same thing. So the suggestion is allow the ability to write your own specialised property() functions. Doing so would make cases 1/2/3 all just special cases of one functionality. Brett _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
