I think it works as Isaac explained if __make_me__ is an instance method that also accepts the calling class type.
On Fri, Feb 13, 2015 at 8:12 PM, Ethan Furman <et...@stoneleaf.us> wrote: > On 02/13/2015 02:31 PM, Serhiy Storchaka wrote: > > On 13.02.15 05:41, Ethan Furman wrote: > >> So there are basically two choices: > >> > >> 1) always use the type of the most-base class when creating new > instances > >> > >> pros: > >> - easy > >> - speedy code > >> - no possible tracebacks on new object instantiation > >> > >> cons: > >> - a subclass that needs/wants to maintain itself must override all > >> methods that create new instances, even if the only change is to > >> the type of object returned > >> > >> 2) always use the type of self when creating new instances > >> > >> pros: > >> - subclasses automatically maintain type > >> - much less code in the simple cases [1] > >> > >> cons: > >> - if constructor signatures change, must override all methods > which > >> create new objects > > > > And switching to (2) would break existing code which uses subclasses > with constructors with different signature (e.g. > > defaultdict). > > I don't think defaultdict is a good example -- I don't see any methods on > it that return a new dict, default or > otherwise. So if this change happened, defaultdict would have to have its > own __add__ and not rely on dict's __add__. > > > > The third choice is to use different specially designed constructor. > > > > class A(int): > > > > --> class A(int): > > ... def __add__(self, other): > > ... return self.__make_me__(int(self) + int(other)) > > > > ... def __repr__(self): > > ... return 'A(%d)' % self > > How would this help in the case of defaultdict? __make_me__ is a class > method, but it needs instance info to properly > create a new dict with the same default factory. > > -- > ~Ethan~ > > > _______________________________________________ > Python-Dev mailing list > Python-Dev@python.org > https://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/mistersheik%40gmail.com > >
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com