1. Python Software Foundation, Official Documentation, "Built-in Functions - property()": The official documentation provides the canonical example of using @property. The code example clearly shows the getter method (decorated with @property) defined first, followed by the setter method (decorated with @temperature.setter). This ordering is required for the decorator syntax to work.
Source: https://docs.python.org/3/library/functions.html#property
2. Python Software Foundation, Official Documentation, "Python HOWTOs - Descriptor How To Guide": This guide explains the descriptor protocol, which is the mechanism underlying properties. It states, "Python’s property() function is a high-level, easy-to-use implementation of a data descriptor." The examples consistently show the getter being defined first to create the property object, which is then modified with .setter() and .deleter() methods.
Source: https://docs.python.org/3/howto/descriptor.html#properties
3. Python Software Foundation, The Python Language Reference, Section 3.3.3. "Customizing attribute access": This section details how descriptors work. The property is described as a way to implement descriptors. The creation of a property object via the @property decorator on a getter method is the first step before setters or deleters can be attached to it.
Source: https://docs.python.org/3/reference/datamodel.html#implementing-descriptors