1+ # Parent class stores a person's first name and last name
2+ class Parent :
3+ def __init__ (self , first_name : str , last_name : str ):
4+ self .first_name = first_name
5+ self .last_name = last_name
6+ # Returns the person's first and last name together
7+ def get_name (self ) -> str :
8+ return f"{ self .first_name } { self .last_name } "
9+
10+ # Child inherits the fields and methods from Parent
11+ # It also allows the person to change their last name
12+ class Child (Parent ):
13+ def __init__ (self , first_name : str , last_name : str ):
14+ super ().__init__ (first_name , last_name )
15+ self .previous_last_names = []
16+ # Changes the last name and saves the old name
17+ def change_last_name (self , last_name ) -> None :
18+ self .previous_last_names .append (self .last_name )
19+ self .last_name = last_name
20+ # Returns the current name and the original last name
21+ def get_full_name (self ) -> str :
22+ suffix = ""
23+ if len (self .previous_last_names ) > 0 :
24+ suffix = f" (née { self .previous_last_names [0 ]} )"
25+ return f"{ self .first_name } { self .last_name } { suffix } "
26+ # Create child object
27+ person1 = Child ("Elizaveta" , "Alekseeva" )
28+ # Child inherits get_name() from Parent
29+ # Output: Elizaveta Alekseeva
30+ print (person1 .get_name ())
31+ # Child has its own get_full_name() method
32+ # Output: Elizaveta Alekseeva
33+ print (person1 .get_full_name ())
34+ # Change the last name
35+ person1 .change_last_name ("Tyurina" )
36+ # The current last name is now Tyurina
37+ # Output: Elizaveta Tyurina
38+ print (person1 .get_name ())
39+ # Shows the new name and the previous last name
40+ # Output: Elizaveta Tyurina (née Alekseeva)
41+ print (person1 .get_full_name ())
42+ # Create a Parent object
43+ person2 = Parent ("Elizaveta" , "Alekseeva" )
44+ # Parent has get_name(), so this works
45+ # Output: Elizaveta Alekseeva
46+ print (person2 .get_name ())
47+ # This causes an AttributeError because Parent
48+ # does not have a get_full_name() method
49+ print (person2 .get_full_name ())
50+ # This also causes an AttributeError because Parent
51+ # does not have a change_last_name() method
52+ person2 .change_last_name ("Tyurina" )
53+ # get_name() still works because it belongs to Parent
54+ # Output: Elizaveta Alekseeva
55+ print (person2 .get_name ())
56+ # This would cause another AttributeError
57+ # because get_full_name() only exists in Child
58+ print (person2 .get_full_name ())
0 commit comments