as discussed in word about names and objectsshared data can have possibly surprising effects with involving mutable objects such as lists and dictionaries for examplethe tricks list in the following code should not be used as class variable because just single list would be shared by all dog instancesclass dogtricks [mistaken use of class variable def __init__(selfname)self name name def add_trick(selftrick)self tricks append(trickd dog('fido' dog('buddy' add_trick('roll over' add_trick('play dead' tricks unexpectedly shared by all dogs ['roll over''play dead'correct design of the class should use an instance variable insteadclass dogdef __init__(selfname)self name name self tricks [creates new empty list for each dog def add_trick(selftrick)self tricks append(trickd dog('fido' dog('buddy' add_trick('roll over' add_trick('play dead' tricks ['roll over' tricks ['play dead' random remarks data attributes override method attributes with the same nameto avoid accidental name conflictswhich may cause hard-to-find bugs in large programsit is wise to use some kind of convention that minimizes the chance of conflicts possible conventions include capitalizing method namesprefixing data attribute names with small unique string (perhaps just an underscore)or using verbs for methods and nouns for data attributes data attributes may be referenced by methods as well as by ordinary users ("clients"of an object in other wordsclasses are not usable to implement pure abstract data types in factnothing in python makes it possible to enforce data hiding -it is all based upon convention (on the other handthe python implementationwritten in ccan completely hide implementation details and control access to an object if necessarythis can be used by extensions to python written in clients should use data attributes with care -clients may mess up invariants maintained by the methods random remarks