入門Python3という書籍でPythonを学習中の初心者です。
現在、プロパティについて学んでいるのですが
組み込み関数のproperty()の挙動がよく分かりません。

次のソースコードでpropertyがどのように動いているかを
詳しく教えていただけると有難いです。

class Duck():
    def __init__(self, input_name):
        self.hidden_name = input_name
    def get_name(self):
        print('inside the getter')
        return print(self.hidden_name)
    def set_name(self, input_name):
        print('inside the setter')
        self.hidden_name = input_name
    name = property(get_name, set_name)

fowl = Duck('Howard')
fowl.name

fowl.name = 'Daffy'
fowl.name

なお、ソースコードは同書から引用しています。
nameに何も代入されていなければ第一引数の関数が、
何かが代入されていたら第二引数の関数が実行されると
考えましたが、腑に落ちません。

簡単な例としてpropertyを用いた、他のソースコードを
元に説明して頂けると幸いです。