********************************************* 2: Variables, Objects and Attributes ********************************************* Summary ---------- - An object is a collection of attributes - variables reference objects, which have a lifetime of their own independent of any variable referencing them - An object can be referenced by many variables and so has no fixed and immutable name. - An attribute is a reference to an object Pythons approach ----------------- - Names are just variables that store references - A variable is created by simply using it - variables are dynamic, untyped and are references to objects Creating Objects ------------------ .. code-block:: python class MyObject: myAttribute = 1 #access using dot notation print(MyObject.myAttribute) # prints 1 MyObject.myAttribute = 2 print(MyObject.myAttribute) # prints 2 # add an attribute MyObject.myNewAttr = 7 # del an attribute del MyObject.myNewAttr Nested Objects ---------------- .. code-block:: python class MyObject1: myAttribute1 = 1 class MyObject2: myAttribute2 = 2 #access MyObject1.MyObject2.myAttribute2 #use a variable to store the reference myRef = MyObject1.MyObject2 myRef.myAttribute2 Modules ------------------------ .. code-block:: python import myModule.MyObject # imports just the object import myModule.MyObject as MySecondObj #imports the same object but changes the variable that references it Namespaces ------------- - Every object has a __dict__ attribute that is its local namespace - It records all the objects attributes - Internally an attribute is looked up in the object dictionary so: .. code-block:: python print(MyObject.myAttribute) # is equal to: print(MyObject.__dict__["myAttribute"])