Changeset 10937:5a8bd2e8426f in orange


Ignore:
Timestamp:
06/28/12 12:25:07 (22 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added '_orange_learnernew' helper method.

This new wrapper properly handles the weight_id positional argument.
It is also called from _orangenew generic wrapper when the base class
is an Orange.core.Learner.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/utils/__init__.py

    r10654 r10937  
    550550""" 
    551551Some utility functions common to Orange classes. 
    552   
     552 
    553553""" 
    554554 
    555 def _orange__new__(base=None): 
    556     """ Return an orange 'schizofrenic' __new__ class method. 
    557      
    558     :param base: base orange class (default orange.Learner) 
     555 
     556def _orange_learner__new__(base): 
     557    """Return an 'schizophrenic' __new__ class method following 
     558    `Orange.core.Lerner.__new__` calling convention. 
     559 
     560    :param base: base class. 
    559561    :type base: type 
    560           
    561     Example:: 
    562         class NewOrangeLearner(orange.Learner): 
    563             __new__ = _orange__new(orange.Learner) 
    564          
    565     """ 
    566     if base is None: 
    567         import Orange 
    568         base = Orange.core.Learner 
    569          
     562 
     563    """ 
     564    import Orange 
     565 
    570566    @wraps(base.__new__) 
    571     def _orange__new_wrapped(cls, data=None, **kwargs): 
    572         if base == object: 
    573             self = base.__new__(cls) 
    574         else: 
    575             self = base.__new__(cls, **kwargs) 
    576  
    577         if data: 
     567    def _orange_learner__new__wrapped(cls, data=None, weight=0, **kwargs): 
     568        self = base.__new__(cls, **kwargs) 
     569        if data is not None: 
    578570            self.__init__(**kwargs) 
    579             return self.__call__(data) 
     571            return self.__call__(data, weight) 
    580572        else: 
    581573            return self 
     574 
     575    return _orange_learner__new__wrapped 
     576 
     577 
     578def _orange__new__(base=None): 
     579    """Return an orange 'schizophrenic' __new__ class method. 
     580 
     581    :param base: base orange class (default `Orange.core.Learner`) 
     582    :type base: type 
     583 
     584    Example:: 
     585        class NewOrangeLearner(Orange.core.Learner): 
     586            __new__ = _orange__new(Orange.core.Learner) 
     587 
     588    """ 
     589    import Orange 
     590    if base is None: 
     591        base = Orange.core.Learner 
     592 
     593    if issubclass(base, Orange.core.Learner): 
     594        return _orange_learner__new__(base) 
     595    else: 
     596        @wraps(base.__new__) 
     597        def _orange__new_wrapped(cls, data=None, **kwargs): 
     598            if base == object: 
     599                self = base.__new__(cls) 
     600            else: 
     601                self = base.__new__(cls, **kwargs) 
     602 
     603            if data: 
     604                self.__init__(**kwargs) 
     605                return self.__call__(data) 
     606            else: 
     607                return self 
     608 
    582609    return _orange__new_wrapped 
    583610 
     
    587614    can be reconstructed with the call `constructor(__dict__)` where __dict__ 
    588615    if the stored (pickled) __dict__ attribute. 
    589      
     616 
    590617    Example:: 
    591         class NewOrangeType(orange.Learner): 
     618        class NewOrangeType(Orange.core.Learner): 
    592619            __reduce__ = _orange__reduce() 
    593     """  
     620    """ 
    594621    return type(self), (), dict(self.__dict__) 
    595622 
     
    600627 
    601628import selection 
    602  
Note: See TracChangeset for help on using the changeset viewer.