[Tutor] Good approach regarding classes attributes
Juan Christian
juan0christian at gmail.com
Sun Sep 7 15:08:09 CEST 2014
On Sun, Sep 7, 2014 at 5:04 AM, Peter Otten <__peter__ at web.de> wrote:
>
> It's not a good approach and it's not pythonic.
>
> In Python you should avoid accessor functions and (pseudo-)private
> __attributes ("Python is not Java"). So
>
> class User:
> def __init__(self, id):
> self.id = id
> # load attributes
> self.personname = [personname from JSON]
> ...
>
> user = User(42)
>
> is certainly better. You might also consider making the class less
> dependent
> of the way you acquire the corresponding data:
>
> class User: # in Python 2: class User(object): ...
> def __init__(self, id, personname, ...)
> self.id = id
> self.personname = personname
> ...
> @classmethod
> def from_id(class_, id):
> # load attributes
> return User(id, personname, ...)
>
> jeff = User(42, "Jeff", ...)
> jack = User.from_id(43)
Ok, no pseudo-private attributes. I read it in tutorials from 2013 and in
the course that I'm taking that this would be a good pythonic way to deal
with class attributes. They wouldn't be truly private, but someone using
the program would see the " __ " in the beginning of the attribute and
wouldn't call it directly, "because we are all adults and such", you saying
that this approach doesn't exist in real life?
I can't give all the 8 attributes to '__init__' because I don't even have
them. I would call it with ID only and them the API server would return me
all the info, and then I would set them. I didn't learn '@classmethod'
decoration yet, but I presume it would work as a 'get()', right? The thing
is, where 'user with id 43' is stored? You get it using 'from_id' but we
don't have any list in there the store users, I got confused in that part.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140907/d49d9384/attachment.html>
More information about the Tutor
mailing list