have the same name by assigning the job local to the self job attribute with self job=jobwe save the passed-in job on the instance for later use as usual in pythonwhere name is assignedor what object it is assigned todetermines what it means speaking of argumentsthere' really nothing magical about __init__apart from the fact that it' called automatically when an instance is made and has special first argument despite its weird nameit' normal function and supports all the features of functions we've already covered we canfor exampleprovide defaults for some of its argumentsso they need not be provided in cases where their values aren' available or useful to demonstratelet' make the job argument optional--it will default to nonemeaning the person being created is not (currentlyemployed if job defaults to nonewe'll probably want to default pay to toofor consistency (unless some of the people you know manage to get paid without having jobs!in factwe have to specify default for pay because according to python' syntax rules and any arguments in function' header after the first default must all have defaultstooadd defaults for constructor arguments class persondef __init__(selfnamejob=nonepay= )self name name self job job self pay pay normal function args what this code means is that we'll need to pass in name when making personsbut job and pay are now optionalthey'll default to none and if omitted the self argumentas usualis filled in by python automatically to refer to the instance object-assigning values to attributes of self attaches them to the new instance testing as you go this class doesn' do much yet--it essentially just fills out the fields of new record-but it' real working class at this point we could add more code to it for more featuresbut we won' do that yet as you've probably begun to appreciate alreadyprogramming in python is really matter of incremental prototyping--you write some codetest itwrite more codetest againand so on because python provides both an interactive session and nearly immediate turnaround after code changesit' more natural to test as you go than to write huge amount of code to test all at once before adding more featuresthenlet' test what we've got so far by making few instances of our class and displaying their attributes as created by the constructor we could do this interactivelybut as you've also probably surmised by nowinteractive testing has its limits--it gets tedious to have to reimport modules and retype test cases each time you start new testing session more commonlypython programmers use step making instances