Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Penghias
Rantai Dekorator
Objektif
Hiasi bumbung dengan bendera berwarna dengan mengaitkan decorators.
Bumbung kini menikmati udara segar selepas terlalu lama terkunci di dalam dapur itu, dan terdapat beberapa baris yang tidak mempunyai bendera. Adalah idea yang baik untuk memasangnya semasa anda berada di sini, walaupun ia agak mencabar memandangkan anda memerlukan pelbagai bendera untuk melengkapkan satu baris. Anda boleh mencapainya dengan mengaitkan decorators.
Decorators dihubungkan dengan menggandakan simbol @, iaitu, memasang pelbagai decorators pada satu fungsi. Sebagai contoh, ini membolehkan anda menyelitkan satu fungsi di antara dua fungsi decorator:
# List to add flags to a line
line = []
# Decorator adding a red flag
def red_flag(func):
def add_flag():
line.append("red")
player.speak("Two red flags added to the line")
func()
line.append("red")
return add_flag
# Decorator adding a blue flag
def blue_flag(func):
def add_flag():
line.append("blue")
player.speak("Two blue flags added to the line")
func()
line.append("blue")
return add_flag
# Decorated Function adding line and middle flag
@blue_flag
@red_flag
def middle_green():
line.append("green")
player.speak("A green flag has been added to the line")
Kod di atas menggambarkan satu fungsi dengan decorators berantai yang disambungkan; decorators ini diselitkan ke dalam fungsi tersebut supaya pada tepi baris, bendera biru diletakkan, lapisan dalam mempunyai bendera merah diletakkan dan akhirnya di tengah-tengah, bendera hijau diletakkan. Kesemuanya ditambahkan ke dalam senarai bernama line, inilah kaedah yang akan digunakan untuk menyusun bendera pada baris-baris.
Mulakan dengan berjalan ke tanda X emas dan menggunakan fungsi read() untuk memeriksa arahan yang disenaraikan pada papan tanda. Di sini, ia akan memberitahu anda bendera apa yang perlu diletakkan di mana dengan terdapat tiga (3) jenis bendera berwarna yang berbeza: "red", "green" dan "blue". Setiap baris akan mempunyai ketiga-tiga bendera, satu (1) di tengah baris, dua (2) di baris dalaman dan dua (2) di baris luaran, menjadikan jumlah keseluruhan lima (5) bendera setiap baris seperti baris yang telah disediakan di bahagian kiri bawah peta.
Berjalan ke tanda X cahaya dan gunakan fungsi collect() untuk mengambil "flags" dalam peti. Teruskan dengan berjalan ke tanda X gelap dan dari kiri ke kanan mula meletakkan bendera mengikut susunan yang diterangkan dalam arahan yang anda baca sebelum ini. Gunakan fungsi-fungsi tengah untuk mencapai ini, contohnya: middle_green() menghasilkan baris bendera seperti ini: ["blue", "red", "green" ,"red","blue" ]. Kemudian, gunakan fungsi place() untuk menetapkan baris menggunakan senarai line, seperti ini: place(line).
Di antara setiap tanda X, bersihkan senarai line dengan menggunakan fungsi clear(), seperti ini: line.clear(), ini membolehkan anda menggunakan semula senarai tanpa perlu mencipta yang baru untuk setiap baris. Tanda X terakhir di sebelah kanan memerlukan fungsi khas:
@
@
def middle_custom():
line.append( Insert append )
player.speak("%s flag has been added to the line"
% ( insert flag ))
Gunakan dua simbol @ yang ditetapkan untuk menambah decorators ke fungsi, teruskan dengan mengisi arahan append pada baris dan warna bendera dalam rentetan. Lakukan ini mengikut arahan dalam papan tanda untuk melengkapkan tahap.