1. Python Software Foundation. (2024). The Python Tutorial, Section 9.3. A First Look at Classes. Official Python 3 documentation. "When a class defines an init() method, class instantiation automatically invokes init() for the newly-created class instance... The init() method may have arguments for greater flexibility. In that case, arguments given to the class instantiation operator are passed on to init()." This confirms that "Excalibur" is passed to init and subsequently assigned to self.name.
Available at: https://docs.python.org/3/tutorial/classes.html#a-first-look-at-classes
2. Python Software Foundation. (2024). The Python Tutorial, Section 9.3.1. Class and Instance Variables. Official Python 3 documentation. "Instance variables are for data unique to each instance... Class variables are for attributes and methods shared by all instances of the class." This reference clarifies the distinction between instance variables (like self.name) and class variables, showing why option A is incorrect.
Available at: https://docs.python.org/3/tutorial/classes.html#class-and-instance-variables
3. Guttag, J. V. (2016). Introduction to Computation and Programming Using Python, With Application to Understanding Data (2nd ed.). MIT Press. Chapter 8, "Classes and Object-Oriented Programming," explains that the init method is used to initialize the data attributes (instance variables) of an object when it is created. The value passed during instantiation is used to set the initial state of these attributes. This supports the core logic of option C.