Berikut adalah contoh bagaimana kesalahan terjadi ketika modul yang diimpor dibayangi oleh file lokal dengan nama yang sama Show Ini adalah file bernama Namun, saya memiliki file lokal bernama _0 yang membayangi modul requests resmi dan menyebabkan kesalahan _Ini juga dapat terjadi ketika Anda memberi modul nama yang sama dengan modul pustaka standar, mis. g. _2Anda dapat menggunakan modul _3 untuk mencetak semua nama modul bawaan jika Anda pernah bertanya-tanya apakah modul lokal Anda berbenturan dengan modul bawaanKesalahan juga terjadi jika salah satu modul yang Anda impor mengimpor modul yang memiliki nama yang sama dengan file lokal di proyek Anda Misalnya, jika Anda mengimpor 2, tetapi Anda memiliki file lokal bernama 7, Anda masih akan mendapatkan kesalahanPenerjemah Python dalam modul bawaan, lalu di direktori saat ini, lalu di PATH PYTHON, lalu di direktori default yang bergantung pada instalasi Jadi, saat kami membuat file lokal dengan nama yang sama dengan modul pihak ketiga, kami secara efektif membayangi modul resmi dengan file lokal kami Untuk mengatasi Python "AttributeError. modul tidak memiliki atribut", pastikan Anda belum menamai modul lokal Anda dengan nama modul jarak jauh, mis. g. 7 atau 0 dan menghapus semua dependensi melingkar dalam pernyataan import Itu juga mendefinisikan nama untuk beberapa tipe objek yang digunakan oleh juru bahasa Python standar, tetapi tidak diekspos sebagai builtin seperti atau Terakhir, ini menyediakan beberapa kelas dan fungsi utilitas terkait tipe tambahan yang tidak cukup mendasar untuk dibangun Pembuatan Tipe Dinamisjenis. kelas_baru(nama , basis=(), kwds=None, exec_body=None)Membuat objek kelas secara dinamis menggunakan metaclass yang sesuai Tiga argumen pertama adalah komponen yang membentuk header definisi kelas. nama kelas, kelas dasar (dalam urutan), argumen kata kunci (seperti Argumen exec_body adalah panggilan balik yang digunakan untuk mengisi ruang nama kelas yang baru dibuat. Itu harus menerima ruang nama kelas sebagai satu-satunya argumen dan memperbarui ruang nama secara langsung dengan konten kelas. Jika tidak ada panggilan balik yang diberikan, efeknya sama dengan meneruskan Baru di versi 3. 3 jenis. prepare_class(nama , basis=(), kwds=None)Menghitung metaclass yang sesuai dan membuat namespace kelas Argumen adalah komponen yang membentuk header definisi kelas. nama kelas, kelas dasar (berurutan) dan argumen kata kunci (seperti Nilai yang dikembalikan adalah 3-tuple. metaclass adalah metaclass yang sesuai, namespace adalah namespace kelas yang disiapkan dan kwds adalah salinan terbaru dari argumen kwds yang diteruskan dengan entri Baru di versi 3. 3 Berubah di versi 3. 6. Nilai default untuk elemen class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented0 dari tuple yang dikembalikan telah berubah. Sekarang pemetaan urutan penyisipan digunakan ketika metaclass tidak memiliki metode class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented1. Lihat juga Detail lengkap dari proses pembuatan kelas yang didukung oleh fungsi-fungsi ini PEP 3115 - Metaclasses di Python 3000Memperkenalkan pengait namespace class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented1 Selesaikan entri MRO secara dinamis seperti yang ditentukan oleh PEP 560 Fungsi ini mencari item dalam basis yang bukan turunan dari , dan mengembalikan tuple di mana setiap objek yang memiliki metode class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented4 diganti dengan hasil yang belum dibuka dari pemanggilan metode ini. Jika item basis adalah turunan dari , atau tidak memiliki metode class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented4, maka item tersebut disertakan dalam tuple pengembalian tidak berubah Baru di versi 3. 7 Lihat juga PEP 560 - Dukungan inti untuk modul pengetikan dan tipe umum Jenis Penerjemah StandarModul ini memberikan nama untuk banyak tipe yang diperlukan untuk mengimplementasikan juru bahasa Python. Ini dengan sengaja menghindari memasukkan beberapa jenis yang muncul hanya secara kebetulan selama pemrosesan seperti jenis class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented7 Penggunaan umum dari nama-nama ini adalah untuk atau cek Jika Anda menginstansiasi salah satu dari jenis ini, perhatikan bahwa tanda tangan dapat berbeda di antara versi Python Nama standar ditentukan untuk jenis berikut jenis. NoneTypeTipe dari Baru di versi 3. 10 jenis. Jenis Fungsijenis. LambdaTypeJenis fungsi yang ditentukan pengguna dan fungsi yang dibuat oleh ekspresi Memunculkan Kejadian audit hanya terjadi untuk instantiasi langsung objek fungsi, dan tidak dimunculkan untuk kompilasi normal jenis. JenisGeneratorJenis objek -iterator, dibuat oleh fungsi generator jenis. CoroutineTypeJenis objek, dibuat oleh fungsi Baru di versi 3. 5 jenis. AsyncGeneratorTypeJenis objek -iterator, dibuat oleh fungsi generator asinkron Baru di versi 3. 6 jenis kelas. Jenis Kode(**kwargs)Tipe untuk objek kode seperti dikembalikan oleh Memunculkan Perhatikan bahwa argumen yang diaudit mungkin tidak cocok dengan nama atau posisi yang diperlukan oleh penginisialisasi. Kejadian audit hanya terjadi untuk instantiasi langsung objek kode, dan tidak dimunculkan untuk kompilasi normal ganti(**kwargs)Kembalikan salinan objek kode dengan nilai baru untuk bidang yang ditentukan Baru di versi 3. 8 jenis. CellTypeTipe untuk objek sel. objek seperti itu digunakan sebagai wadah untuk variabel bebas fungsi Baru di versi 3. 8 jenis. Tipe MetodeJenis metode instance kelas yang ditentukan pengguna jenis. BuiltinFunctionTypetipe. BuiltinMethodTypeJenis fungsi bawaan seperti or , dan metode kelas bawaan. (Di sini, istilah "built-in" berarti "ditulis dalam C". ) jenis. WrapperDescriptorTypeJenis metode dari beberapa tipe data bawaan dan kelas dasar seperti atau Baru di versi 3. 7 jenis. MethodWrapperTypeJenis metode terikat dari beberapa tipe data bawaan dan kelas dasar. Misalnya jenis Baru di versi 3. 7 jenis. NotImplementedTypeTipe dari Baru di versi 3. 10 jenis. MethodDescriptorTypeJenis metode dari beberapa tipe data bawaan seperti Baru di versi 3. 7 jenis. ClassMethodDescriptorTypeJenis metode kelas tidak terikat dari beberapa tipe data bawaan seperti Baru di versi 3. 7 jenis kelas. ModuleType(nama , doc=None)Tipe dari. Konstruktor mengambil nama modul yang akan dibuat dan secara opsional Catatan Gunakan untuk membuat modul baru jika Anda ingin menyetel berbagai atribut yang dikontrol impor __dokter__Bagian dari modul. Default ke Yang memuat modul. Default ke Atribut ini untuk mencocokkan seperti yang disimpan dalam objek Catatan Versi Python yang akan datang mungkin berhenti menyetel atribut ini secara default. Untuk mencegah kemungkinan perubahan ini, lebih baik baca dari atribut atau gunakan Berubah di versi 3. 4. Default ke Nama modul. Diharapkan cocok __kemasan__Modul mana yang dimiliki. Jika modulnya adalah tingkat atas (mis. e. bukan bagian dari paket tertentu) maka atribut harus disetel ke Atribut ini untuk mencocokkan seperti yang disimpan dalam objek Catatan Versi Python yang akan datang mungkin berhenti menyetel atribut ini secara default. Untuk menghindari kemungkinan perubahan ini, lebih baik baca dari atribut saja atau gunakan Berubah di versi 3. 4. Default ke Catatan status terkait sistem impor modul. Diharapkan menjadi contoh dari Baru di versi 3. 4 jenis. EllipsisTypeTipe dari Baru di versi 3. 10 jenis kelas. GenericAlias(t_origin , t_args)Jenis seperti
>>> from types import GenericAlias >>> list[int] == GenericAlias(list, (int,)) True >>> dict[str, int] == GenericAlias(dict, (str, int)) True Baru di versi 3. 9 Berubah di versi 3. 9. 2. Tipe ini sekarang dapat dijadikan subkelas. jenis kelas. UnionTypeTipe dari Baru di versi 3. 10 jenis kelas. TracebackType(tb_next , tb_frame, tb_lasti, tb_lineno)Jenis objek traceback seperti yang ditemukan di Lihat detail atribut dan operasi yang tersedia, dan panduan untuk membuat traceback secara dinamis jenis. FrameTypeJenis objek bingkai seperti yang ditemukan di Lihat detail atribut dan operasi yang tersedia jenis. GetSetDescriptorTypeJenis objek yang ditentukan dalam modul ekstensi dengan Jenis objek yang ditentukan dalam modul ekstensi dengan Detail implementasi CPython. Dalam implementasi Python lainnya, tipe ini mungkin identik dengan Proksi hanya-baca dari sebuah pemetaan. Ini memberikan tampilan dinamis pada entri pemetaan, yang berarti bahwa saat pemetaan berubah, tampilan mencerminkan perubahan ini Baru di versi 3. 3 Berubah di versi 3. 9. Diperbarui untuk mendukung operator gabungan baru ( Kembalikan Kembalikan item pemetaan yang mendasarinya dengan key key. Memunculkan kunci if tidak ada dalam pemetaan yang mendasarinya iter(proksi)Kembalikan iterator di atas kunci pemetaan yang mendasarinya. Ini adalah jalan pintas untuk Kembalikan jumlah item dalam pemetaan yang mendasarinya salin()Kembalikan salinan dangkal dari pemetaan yang mendasarinya dapatkan(kunci[ , default])Kembalikan nilai untuk kunci jika kunci ada di pemetaan yang mendasarinya, jika tidak, default. Jika default tidak diberikan, defaultnya adalah Kembalikan tampilan baru dari item pemetaan yang mendasarinya ( Kembalikan tampilan baru dari kunci pemetaan yang mendasarinya nilai()Kembalikan tampilan baru dari nilai pemetaan yang mendasarinya terbalik (proksi)Kembalikan iterator terbalik di atas kunci pemetaan yang mendasarinya Baru di versi 3. 9 Kelas dan Fungsi Utilitas Tambahanjenis kelas. SimpleNamespaceSubclass sederhana yang menyediakan akses atribut ke namespace-nya, serta repr yang berarti Tidak seperti , dengan Jenisnya kira-kira setara dengan kode berikut class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented_
Baru di versi 3. 3 Berubah di versi 3. 9. Urutan atribut dalam repr diubah dari abjad menjadi penyisipan (seperti Arahkan akses atribut pada kelas ke __getattr__ Ini adalah deskriptor, digunakan untuk mendefinisikan atribut yang bertindak berbeda saat diakses melalui instance dan melalui kelas. Akses instance tetap normal, tetapi akses ke atribut melalui kelas akan dialihkan ke metode __getattr__ kelas; Ini memungkinkan seseorang untuk memiliki properti yang aktif pada sebuah instance, dan memiliki atribut virtual pada kelas dengan nama yang sama (lihat contoh) Baru di versi 3. 4 Fungsi Utilitas Coroutinejenis. coroutine(gen_func)Fungsi ini mengubah fungsi menjadi a yang mengembalikan coroutine berbasis generator. Coroutine berbasis generator masih berupa , tetapi juga dianggap sebagai objek dan. Namun, itu mungkin tidak menerapkan metode Jika gen_func adalah fungsi generator, itu akan dimodifikasi di tempat Jika gen_func bukan fungsi generator, itu akan dibungkus. Jika mengembalikan instance dari , instance tersebut akan dibungkus dengan objek proxy yang dapat ditunggu. Semua jenis objek lainnya akan dikembalikan sebagaimana adanya Bagaimana cara mendapatkan Getattr dengan Python?Sintaksis. getattr(obj, kunci, def) Parameter Pengembalian. Nilai objek jika nilai tersedia, nilai default jika atribut tidak ada. dan mengembalikan AttributeError jika atribut tidak ada dan nilai default tidak ada. ditentukan Apa yang dilakukan __ Getattr __ dengan Python?Fungsi Python getattr() digunakan untuk mendapatkan nilai atribut objek dan jika tidak ada atribut objek yang ditemukan, nilai default dikembalikan.
Untuk apa Setattr () dan Getattr () digunakan?Python setattr() dan getattr() bergandengan tangan. Seperti yang telah kita lihat apa yang dilakukan getattr(); . to assign a new value to an object/instance attribute. |