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

Reply via email to