How would I create an class with a "Person.Address.City" property?

Marc 'BlackJack' Rintsch bj_666 at gmx.net
Tue Dec 19 02:36:46 EST 2006


In <mailman.1782.1166512611.32031.python-list at python.org>, Jamie J. Begin
wrote:

> Let's say I wanted to create an object that simply outputted something
> like this:
> 
>>>> import employees
>>>> person = employee("joe") # Get Joe's employment file
>>>> print employee.Title # What does Joe do?
> Developer
>>>> print person.Address.City # Which city does Joe live in?
> Detroit
>>>> print person.Address.State # Which state?
> Michigan
> 
> To do this would I create nested "Address" class within the "employee"
> class? Would it make more sense to just use "print
> person.Address('City')" instead?

That depends on the usage of the addresses.  If you need them as objects
with "behavior" i.e. methods then you would write an `Address` class.  If
you can live with something more simple than a `dict` as `address`
attribute of `Employee` objects might be enough.

BTW you wouldn't create a nested `Address` *class*, but hold a reference
to an `Address` *object* within the `Employee` *object*.

class Address(object):
    def __init__(self, city, state):
        self.city = city
        self.state = state

class Employee(object):
    def __init__(self, name, title, address):
        self.name = name
        self.title = title
        self.address = address

employees = { 'Joe': Employee('Joe',
                              'Developer',
                              Address('Detroit', 'Michigan')) }

def employee(name):
    return employees[name]


def main():
    person = employee('Joe')
    print person.title
    print person.address.city
    print person.address.state

Ciao,
	Marc 'BlackJack' Rintsch



More information about the Python-list mailing list