On 11/02/2016 06:46 AM, stest...@gmail.com wrote:

I was hoping to canvas opinion on using classmethods as constructors over 
__init__.

We've got a colleague who is very keen that __init__ methods don't contain any 
logic/implementation at all, and if there is any, then it should be moved to a 
create() classmethod.

So every Python programmer who is used to creating new instances with 
`ThatThing()` will have to learn that some of your classes need to be 
`ThatThing.create()` ?

Horrible idea.

The purpose of classmethods that create the same kind of object is to provide 
constructors that take different things -- for example:

class date(object):

    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    @classmethod
    def from_stardate(cls, sd):
        ad = sd - SOME_CONSTANT_VALUE
        year = ...
        month = ...
        day = ...
        return cls(year, month, day)

If the goal is to make testing easier, one way to do that is:

def __init__(self, ..., queue=None):
    if queue is None:
        queue = Queue.Queue()
    self.queue = queue

--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to