Your code for parent/element structures is supposed to look like:
class FooE(Element):
... stuff ...
class FooP(Parent):
Element = FooE
def _element_constructor_(self, arg)
return self.element_class(arg)
... more stuff...
The FooP.element_class is dynamically generated from FooP.Element, and this
is the class that is named FooE_with_category. You never use FooE directly,
always FooP.element_class. In particular, if you later add a derived class
class DerivedFooP(FooP):
Element = DerivedFooE
then the inherited methods will automatically use the derived
self.element_class. Some of the category stuff uses that dynamically
generated class as a mechanism to implement its functionality, which is
where the name comes from. Its a bit of a misnomer. IMHO the category
functionality would have been better implemented by a proper metaclass than
by dynamically assigning to __class__ to dynamically construct the class at
import time, not at construction time. And only have one class instead of
the confusion with FooE vs. FooE_with_category. And as a further warning,
this was for Python element classes---Cython classes are different again.
On Friday, August 8, 2014 3:04:39 PM UTC+1, Nathann Cohen wrote:
>
> But why isn't it reported as an attribute error of the class that was
> created by the user, i.e. EllipticCurve_field ? I understand that the
> category mechanism will try to find the method elsewhere if it is not
> defined, but still: it seems to say that "whatever the method that was
> not found" it should have been implemented in some category code
> instead of .... in EllipticCurve_field directly.
>
>
--
You received this message because you are subscribed to the Google Groups
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.