<< Chapter < Page | Chapter >> Page > |
Listing 8 . Instantiate two objects from the class. |
---|
print("2 Instantiate two objects")
ref01 = TestClass()ref02 = TestClass()
print("3 Display class var using objects")ref01.printClassVar01()
ref02.printClassVar01() |
Listing 8 also uses the variables named ref01 and ref02 to call the printClassVar01 method shown in Listing 7 on each object. This method concatenates and prints a portion of the object identifier (self) with the contents of classVar (as seen by the object) .
Figure 4 shows the output produced by the code in Listing 8 . As you can tell from Figure 4 , each object sees classVar as containing the initial value from Listing 7 .
Figure 4 . Output from the code in Listing 8. |
---|
2 Instantiate two objects
3 Display class var using objectsTestClass object at 0x02091DD0: [1, 2, 3, 4]
TestClass object at 0x0218C710: [1, 2, 3, 4] |
The code in Listing 9 uses the reference to a single object ( ref01 ) to call the method named modifyClassVar01 (see Listing 7 ) on that object, which appends the string "a" onto the list referred to by the class variable named classVar . (As an aside, note that the code in the method uses the word self to access the class variable.)
Listing 9 . Modify class variable using object. |
---|
print("4 Modify class var using object")
ref01.modifyClassVar01()print("5 Display class var using objects")
ref01.printClassVar01()ref02.printClassVar01() |
After causing the string "a" to be appended to the list, Listing 9 uses the variables named ref01 and ref02 to call the printClassVar01 method on each object. This causes each object to print the list as it sees it. The results are shown in Figure 5 .
Figure 5 . Output from the code in Listing 9. |
---|
4 Modify class var using object
5 Display class var using objectsTestClass object at 0x02091DD0: [1, 2, 3, 4, 'a']
TestClass object at 0x0218C710: [1, 2, 3, 4, 'a'] |
Even though the contents of the list were modified only by code executed in ref01 , the results are seen by both objects. This is because the class variable is shared among all objects instantiated from theclass.
I could have stopped at that point and stated "case closed" . However, I decided to add a few more lines of code to illustrate that it doesn't matter how a classvariable is modified, it still impacts all objects instantiated from the class because the class variable is shared among all objects instantiated fromthe class.
The code in Listing 10 uses the name of the class to access and modify the list referred to by the class variable named classVar in the class named TestClass . The boolean value True is appended to the list by the code in Listing 10 .
Listing 10 . Modify the class variable using the class name. |
---|
print("6 Modify class var using class")
TestClass.classVar.append(True)print("7 Display class var using objects")
ref01.printClassVar01()
ref02.printClassVar01()print("8 Display class var using class: " + str(TestClass.classVar)) |
After that, the code in Listing 10 causes each object to print the list as it see it. To seal the deal, the code in Listing 10 uses the name of the class to access and print the value stored in the class variable. The result isshown in Figure 6 .
Notification Switch
Would you like to follow the 'Itse 1359 introduction to scripting languages: python' conversation and receive update notifications?