
Halo habrozhiteli! Kami baru-baru ini merilis buku baru tentang Python. Kami menawarkan Anda untuk segera membiasakan diri dengan materi pencarian fakta.
Kutipan. 7.4. Menggunakan IDLE
Karena IDLE menyertakan REPL, Anda dapat memasukkan kode di atas dan menguraikannya langsung di REPL. Namun, Anda juga dapat menulis kode, menjalankannya, dan menguraikannya dari REPL. Untuk mencoba fitur ini, buka file baru dan masukkan kode berikut di dalamnya:
name = "Matt" first = name age = 1000 print(id(age)) age = age + 1 print(id(age)) names = [] print(id(names)) names.append("Fred") print(id(names))
Simpan kode dalam file bernama iden.py. Jalankan file. Di IDLE, tekan tombol F5 untuk melakukan ini. Empat angka akan ditampilkan dalam REPL. Dua yang pertama akan berbeda; ini menunjukkan bahwa bilangan bulat tidak dapat diubah. Dua angka terakhir sama. Ini karena meskipun mengubah daftar nama, pengidentifikasi tetap sama. Secara umum, fakta ini bukanlah sesuatu yang baru secara fundamental.
Sekarang hal yang paling menarik: jika Anda memasukkan perintah dir () di REPL, itu akan menampilkan daftar variabel. Anda akan melihat bahwa variabel global dari iden.py sekarang tersedia.
REPL di IDLE menyediakan akses ke semua variabel global. Anda dapat mencari nama dan nama dan bahkan memanggil fungsi atau metode - misalnya, names.append ("George").
Memiliki kesempatan untuk mempelajari hasil kode yang baru saja dieksekusi, Anda dapat dengan cepat menganalisis kode dan bereksperimen dengannya. Pengembang Python berpengalaman sering menulis kode dalam REPL, menempelkannya ke file, menjalankan file lagi, menulis kode baru dalam REPL, dan terus menulis kode dengan cara ini.
Kutipan. 22. Subklasifikasi
Selain mengelompokkan status dan operasi, kelas juga menyediakan penggunaan kembali kode. Jika Anda sudah memiliki kelas, dan Anda membutuhkan kelas lain yang memiliki perilaku yang sedikit berbeda, salah satu cara untuk menggunakan kembali adalah dengan subkelas. Kelas dari mana subclassing dilakukan disebut superclass (nama umum lain untuk superclass adalah kelas induk).
Misalkan Anda ingin membuat kursi yang bisa menampung enam pemain ski. Untuk membuat kelas Chair6, yang mensimulasikan kursi untuk enam orang, versi Kursi yang lebih khusus, Anda bisa menggunakan subclassing. Subkelas memungkinkan programmer untuk mewarisi metode kelas induk dan menimpa metode yang perlu diubah.
Berikut ini adalah kelas Chair6, yang merupakan subclass dari CorrectChair:
>>> class Chair6(CorrectChair): ... max_occupants = 6
Catatan: kelas induk dari CorrectChair terlampir di tanda kurung setelah nama kelas. Perhatikan bahwa Chair6 tidak mendefinisikan konstruktor dalam tubuhnya, namun Anda dapat membuat instance kelas:
>>> sixer = Chair6(76)
Bagaimana Python membuat objek jika tidak ada konstruktor yang didefinisikan di kelas? Inilah yang terjadi: ketika Python mencari metode .__ init__, pencarian dimulai dengan Chair6. Karena kelas Chair6 hanya berisi atribut max_occupants, Python tidak akan menemukan metode .__ init__ di sini. Tetapi karena Chair6 adalah subclass dari CorrectChair, ia memiliki atribut __bases__ yang mencantumkan kelas dasar yang dirangkum dalam tuple:
>>> Chair6.__bases__ (__main__.CorrectChair,)
Kemudian Python mencari konstruktor di kelas dasar. Dia menemukan konstruktor di CorrectChair dan menggunakannya untuk membuat kelas baru.
Pencarian yang sama terjadi ketika memanggil .load sebagai contoh. Instance tidak memiliki atribut yang sesuai dengan nama metode, jadi Python memeriksa kelas instance. Chair6 juga tidak memiliki metode .load, jadi Python mencari atribut di kelas dasar CorrectChair. Di sini, metode .load dipanggil dengan nilai yang terlalu besar, menghasilkan kesalahan ValueError:
>>> sixer.load(7) Traceback (most recent call last): File "/tmp/chair.py", line 30, in <module> sixer.load(7) File "/tmp/chair.py", line 13, in load new_val = self._check(self.count + number) File "/tmp/chair.py", line 23, in _check number)) ValueError: Invalid count:7
Python menemukan metode di kelas dasar, tetapi memanggil metode ._check menghasilkan kesalahan ValueError.
22.1. Menghitung Berhenti
Terkadang pemain ski gagal naik lift dengan benar. Dalam kasus seperti itu, operator memperlambat atau menghentikan lift untuk membantu pemain ski. Kita dapat menggunakan Python untuk membuat kelas baru yang akan menghitung jumlah pemberhentian tersebut.
Asumsikan bahwa setiap panggilan ke .load memanggil fungsi yang mengembalikan indikasi logis apakah telah terjadi atau tidak. Dalam parameter fungsi, jumlah pemain ski dan objek kursi ditransfer.
Berikut ini adalah kelas yang mendapatkan fungsi is_stalled di konstruktor. Fungsi ini akan dipanggil setiap kali .load disebut:
>>> class StallChair(CorrectChair): ... def __init__(self, id, is_stalled): ... super().__init__(id) ... self.is_stalled = is_stalled ... self.stalls = 0 ... ... def load(self, number): ... if self.is_stalled(number, self): ... self.stalls += 1 ... super().load(number)
Untuk membuat turunan dari kelas ini, Anda harus menyediakan fungsi is_stalled. Fungsi sederhana berikut menghasilkan berhenti di 10% kasus:
>>> import random >>> def ten_percent(number, chair): ... """Return True 10% of time""" ... return random.random() < .1
Sekarang Anda dapat membuat instance dengan menentukan fungsi ten_percent sebagai parameter is_stalled:
>>> stall42 = StallChair(42, ten_percent)
22.2. super
Ingatlah bahwa StallChair mendefinisikan metode .__ init__-nya sendiri, yang dipanggil saat instance dibuat. Catatan: baris pertama konstruktor terlihat seperti ini:
super().__init__(id)
Saat Anda memanggil super di dalam metode, Anda mendapatkan akses ke kelas induk yang benar.
Baris dalam konstruktor memungkinkan Anda untuk memanggil konstruktor CorrectChair. Alih-alih mengulangi logika menetapkan id dan menghitung atribut, Anda dapat menggunakan logika dari kelas induk. Karena StallChair memiliki atribut tambahan yang harus ditetapkan untuk instance, ini dapat dilakukan setelah memanggil konstruktor induk.
Metode .load juga berisi panggilan ke super:
def load(self, number): if self.is_stalled(number, self): self.stalls += 1 super().load(number)
Dalam metode .load, Anda memanggil fungsi is_stalled untuk menentukan apakah lift telah berhenti, dan kemudian mentransfer kontrol fungsionalitas .load asli dari CorrectChair menggunakan super.
Menempatkan kode umum di satu tempat (di kelas dasar) mengurangi jumlah kesalahan dan duplikasi kode.
Tentang penulis
Matt Harrison telah menggunakan Python sejak tahun 2000. Dia memimpin MetaSnake, sebuah perusahaan konsultan dan pelatihan perusahaan di Python dan teori analisis data. Di masa lalu, ia bekerja di bidang penelitian, manajemen perakitan dan pengujian, intelijen bisnis, dan penyimpanan data.
Dia telah memberikan presentasi dan kuliah pelatihan di konferensi seperti Strata, SciPy, SCALE, PyCON dan OSCON, serta di konferensi pengguna lokal. Struktur dan bahan buku ini didasarkan pada pengalaman praktisnya dalam mengajar Python. Matt secara berkala memposting informasi bermanfaat terkait Python di Twitter (@__mharrison__).
Editor Ilmiah
Roger A. Davidson saat ini adalah dekan Departemen Matematika di American River College di Sacramento, California. Disertasi doktoralnya ditulis dengan topik teknik kedirgantaraan, tetapi ia juga memegang diploma dalam pendidikan di bidang ilmu komputer, teknik listrik dan sistem, dan juga baru-baru ini menerima sertifikat dalam ilmu data (yang mulai ketertarikannya dengan Python). Sepanjang karirnya, Roger telah bekerja untuk NASA, untuk perusahaan Fortune 50, startup, dan community college. Dia sangat antusias tentang pendidikan, sains (tidak hanya pengolahan data), pai Blackberry dan kepemimpinan tim heterogen dalam memecahkan masalah besar.
Andrew McLaughlin (AndrewMcLaughlin) - programmer dan perancang, administrator sistem di pagi hari dan seorang lelaki keluarga di sore hari. Karena perhatiannya pada detail, ia telah terlibat dalam pemrograman web sejak tahun 1998. Pemenang Penghargaan Kehormatan George Fox University, Andrew memegang gelar dalam bidang manajemen dan sistem informasi. Di waktu luangnya, ia pergi berkemah bersama istri dan dua anaknya, dan kadang-kadang juga bekerja di bengkel pertukangan kayu (semua jari masih ada di tempatnya). Baca posting Twitter-nya: @amclaughlin.
»Informasi lebih lanjut tentang buku ini dapat ditemukan di
situs web penerbit»
Isi»
KutipanUntuk Habrozhitelami, diskon 20% pada kupon -
Python .