human
Here you see below is the more usual Python program, except instead of using the pure Python class above, the equivalent built-in property type (lowercase) is used as a decorator instead given the following:
I am working on the file "Descriptors and Properties.ipynb".
The first task is:
Fun though that was, there's more indirection going on than necessary.  
The methods of Generic are themselves suitable as setters and getters, without needing to delegate to some instance of C with its fancy 'x' property.  
What you see below is the more usual Python program, except instead of using the pure Python class above, the equivalent built-in property type (lowercase) is used as a decorator instead.  
Reading the pure Python version shows how it works.
Can you write Python code for it?
assistant
#Here you see below is the more usual Python program, except instead of using the pure Python class above, the equivalent built-in property type (lowercase) is used as a decorator instead.

class Generic:
    
    def __init__(self, a=None, b=None):
        self.y = a
        self.z = b
    
    @property
    def y(self):
        return self.__y
    
    @y.setter
    def y(self, val):
        print("Generic setter for y")
        self.__y = val

    @property
    def z(self):
        return self.__z
        
    @z.setter
    def z(self, val):
        print("Generic setter for z")
        self.__z = val