[Cython] non-virtual methods

Stefan Behnel stefan_ml at behnel.de
Tue Aug 30 18:51:45 CEST 2011


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.

Stefan


More information about the cython-devel mailing list