On Wednesday, November 2, 2016 at 1:47:00 PM UTC, stes...@gmail.com wrote:
> Hi
> 
> 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.
> 
> As a concrete example, one change proposed was to go from this:
> 
> ```
> def __init__(self, ...):
>     self.queue = Queue.Queue()
> 
> to this:
> 
> def __init__(self, queue):
>     self.queue = queue
> 
> @classmethod
> def create(cls, ...):
>     return cls(Queue.Queue())
> 
> ```
> 
> The rationale is that it decouples the class from the queue implementation 
> (no evidence or suggestion that we would actually ever want to change impl in 
> this case), and makes testing easier.
> 
> I get the underlying principal, and it's one that a strict OOp approach would 
> suggest, but my gut feeling is that this is not a pythonic approach at all.
> 
> What do people feel about this?
> 
> Thanks
> 
> Steve

I suggest that you read this 
https://docs.python.org/3/reference/datamodel.html#object.__new__ before you do 
anything.

Kindest regards.

Mark Lawrence.
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to