2011/8/30 Stefan Behnel <stefan...@behnel.de>:
> Vitja Makarov, 30.08.2011 18:39:
>>
>> 2011/8/30 Stefan Behnel:
>>>
>>> Robert Bradshaw, 30.08.2011 18:18:
>>>>
>>>> On Tue, Aug 30, 2011 at 9:14 AM, Vitja Makarov wrote:
>>>>>
>>>>> What about final classes with cpdef methods?
>>>>>
>>>>> @cython.final
>>>>> class Foo:
>>>>>    cpdef bar(self):
>>>>>        pass
>>>>>
>>>>> Should that raise an error?
>>>>
>>>> That should be perfectly fine.
>>>
>>> Well, the 'final' decorator shouldn't work on normal Python classes.
>>>
>>> Regarding extension types, CPython has a way of declaring them 'final'
>>> with
>>> a type flag, which effectively prevents them from being subclassed in
>>> Python. So the above works as just fine for cdef classes.
>>>
>>
>> Ok. So final class could have cpdef methods but non-final extension
>> type couldn't, am I right?
>
> All extension types can have cpdef methods, be they final or not. For final
> classes, cpdef methods simply mean that they have a Python wrapper and will
> otherwise be called directly when called from Cython.
>
> Actually, for cpdef methods in final classes, we can even drop the override
> check in the DefNode wrapper. I don't think that currently happens.
>

Currently I drop OverrideCheckNode for all final cpdef methods, see
https://github.com/cython/cython/pull/59/files#L2R1751

Final classes can have cpdef method that's ok.
Could non-final classes have final-cpdef methods?

Currently final class means that all its c[p]def methods are final too.

-- 
vitja.
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to