<< Chapter < Page | Chapter >> Page > |
If both the object and the class contain attributes with the same name, the attribute in the object will shadow or hide the attribute in the class. I willdemonstrate the impact of this later.
If the search pattern described above is correct, we would expect the code in Listing 5 to display the values contained in each of the two new class variables belonging to the class named TestClass . Figure 2 shows the output produced by the code in Listing 5 and verifies that the search pattern described above is probably correct. The values stored in the new class variables are displayedin Figure 2 by the code in Listing 5 .
Figure 2 . Output of the code in Listing 5. |
---|
Display both class variables via one object
ref01: ABCDref01: 1234 |
The code in Listing 6 along with the output shown in Figure 10 shows unsurprisingly that the other object that was instantiated from TestClass can be used to access and display the same contents of the same two class variables.
Listing 6 . Display both class variables via the other object. |
---|
print("Display both class variables via the other object")
print("ref02: " + ref02.classVar01)print("ref02: " + ref02.classVar02) |
This is because class variables belonging to a class are shared among all objects instantiated from that class unless shadowed by an instance variablehaving the same name in an object of the class. This will be demonstrated in the programs that follow.
Listing 16 shows a program that probably comes closer to the intended use of class variables than the code in the earlier program shown in Listing 15 . The output from the code shown in Listing 16 is shown in Figure 11 .
This program demonstrates that class variables are shared among the objects instantiated from a class. It also demonstrates that changes to class variablesin that class impact all of the objects instantiated from the class.
Listing 7 shows the definition of the class for this program including the creation andinitialization a class variable named classVar . The class definition also includes a couple of methods that I will discuss later.
Listing 7 . The class definition. |
---|
class TestClass(object):
classVar = [1,2,3,4]def modifyClassVar01(self):
self.classVar.append("a")def printClassVar01(self):
print(str(self)[10:40]+ ": " + str(self.classVar))
print("1 Display class var using class: " + str(TestClass.classVar)) |
Listing 7 also contains a print statement that prints the value of the variable named classVar by using the name of the class, TestClass , to access the variable. The output is shown in Figure 3 .
The output shown in Figure 3 faithfully reproduces the initial value of the class variable shown in the second line of text in Listing 7 .
Figure 3 . Output from the code in Listing 7. |
---|
1 Display class var using class: [1, 2, 3, 4] |
Listing 8 instantiates two separate and distinct objects from the class named TestClass . Those objects' references are stored in the variables named ref01 and ref02 .
Notification Switch
Would you like to follow the 'Itse 1359 introduction to scripting languages: python' conversation and receive update notifications?