Commit b701fdb7 authored by scoder's avatar scoder Committed by GitHub

Merge pull request #2258 from gabrieldemarmiesse/transfer_overriding_extension_types

Transfered overriding in extension types.
parents 8028f48c e798f07d
...@@ -396,6 +396,47 @@ return value and raise it yourself, for example,:: ...@@ -396,6 +396,47 @@ return value and raise it yourself, for example,::
raise SpamError("Couldn't open the spam file") raise SpamError("Couldn't open the spam file")
Overriding in extension types
-----------------------------
``cpdef`` methods can override ``cdef`` methods::
from __future__ import print_function
cdef class A:
cdef foo(self):
print("A")
cdef class B(A):
cdef foo(self, x=None):
print("B", x)
cdef class C(B):
cpdef foo(self, x=True, int k=3):
print("C", x, k)
When subclassing an extension type with a Python class,
``def`` methods can override ``cpdef`` methods but not ``cdef``
methods::
from __future__ import print_function
cdef class A:
cdef foo(self):
print("A")
cdef class B(A):
cpdef foo(self):
print("B")
class C(B): # NOTE: not cdef class
def foo(self):
print("C")
If ``C`` above would be an extension type (``cdef class``),
this would not work correctly.
The Cython compiler will give a warning in that case.
.. _type-conversion: .. _type-conversion:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment