[Tutor] Question about Classes
mlong at datalong.com
mlong at datalong.com
Mon Nov 24 23:14:09 EST 2003
Hi Magnus,
> Hi Mike!
>
> One of the first thing you should know about classes is that
> inheritance means "is-a". In other words, by letting "Contact"
> inherit "Email" as you did in your code, you are claiming that
> a Contact is a kind of Email. I don't think you really see the
> world like that. I certainly don't. ;) This kind of misuse of
> class mechanisms will only cause grief.
Thanks for "is-a" explanation. My gut told me that this would be some sort of abuse
of classes but I am new to OO programing and really don't "grok" it yet. I
rationalize my abuse by calling it a learning exercise. :)
>
> A contact might *have* emails. That implies composition, or
> an aggregate, that is, the person could have an emails attribute.
So if I wanted to reuse the email functionality in another type of object how would
I do this? For example if have a contact(person entity) class as well as a
company(business entity) class.
> Since the Email class seems to collect emails (plural), it seems
> it would be better to call is "Emails". If you use it through
> an "emails" attribute in the Contact, it seems a bit redundant
> to repeat the word "email" in the method names. (I think this
> long names just occured because your mistake with inheritance.)
>
> class Emails:
> def __init__(self):
> self._emails=[]
>
> def show(self):
> return self._emails
>
> def add(self, email, type):
> self._emails.append((type, email))
>
>> class Contact(Email):
>> def __init__(self
>> ,firstName=''
>> ,lastName=''
>> ):
>> """ Initial object """
>> self.firstName=firstName
>> self.lastName=lastName
> self.emails = Emails()
>>
>> def updateContact(self
>> ,firstName
>> ,lastName
>> ):
>> """ Save Contact Information """
>> self.firstName=firstName
>> self.lastName=lastName
>>
>> def showContactInfo(self):
>> return self.firstName + ' ' + self.lastName
>
> Now you can do:
>
> p.emails.add('x', 'yyy')
>
> and
>
> p.emails.show()
You lost me here. In the preceding section you define _email and yet you refer to
email in this last bit. Does the underscore perform some sort of magic?
Cheers,
Mike
More information about the Tutor
mailing list