globalrev a écrit :
On 16 Maj, 14:19, Bruno Desthuilliers <bruno.
[EMAIL PROTECTED]> wrote:
globalrev a écrit :
(snip)
    def getMovies():
        return self.movies
4/ Python has support for computed attributes, so you just don't need
these getters.

> when class =
> class customer:

Please, do yourself and the world a favour, follow naming conventions (not only will this make your code more readable, but also quite a lot of things in Python rely on conventions).

And really, use newstyle classes unless you have a *very* compelling reason not to.

class Customer(object):

>     def __init__(self, idnbr, movies):
>         self.idnbr = idnbr
>         self.movies = movies
>

print "cust", cust1.idnbr, cust1.movies()

Why do you want to call a list ???

Traceback (most recent call last):
  File "C:\Python25\myPrograms\netflix\netflix.py", line 24, in
<module>
    print "cust", cust1.idnbr, cust1.movies()
TypeError: 'list' object is not callable

Indeed. cust1.movie being a list, that's just what you would expect. Hint : what do you think will happen with the following code:

  alist = [1, 2, 3]
  alist()

When I say that Python has support for computed attributes, it doesn't mean it will automagically add getters/setters for your attributes, but that by default you just *don't need* getters/setters - you'll be able to transparently add them latter if there's an effective need for them - where "transparently" means "without client code knowing it's in fact calling a getter or setter".

Example:

# before:
class Foo(object):
   def __init__(self, name):
      # just a plain attribute assignment
      self.name = name

f = Foo('bruno')
# just a plain attribute access
print f.name

# after
class Foo(object):
   def __init__(self, name):
      # still looks like a plain attribute assignment
      self.name = name

   # defining the setter and getter
   def _setname(self, name):
     print "setting %s name to '%s'" % (self, name)
     self._name = name
   def _getname(self):
     print "retrieving %s name ('%s')" % (self, self._name)
     return self._name.upper()

   # and making this a computed attribute using the getter and
   # setter under the hood
   name = property(fget=_getname, fset=_setname)

f = Foo('bruno')
# still looks like a plain attribute access
print f.name

Also, given your recent posts here, I strongly suggest you take some time doing at least the official tutorial.

HTH
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to