Saya ingin mengganti __getattr__
metode pada kelas untuk melakukan sesuatu yang mewah tetapi saya tidak ingin merusak perilaku default.
Apa cara yang benar untuk melakukan ini?
python
getattr
getproperty
heats
sumber
sumber
Jawaban:
Mengesampingkan
__getattr__
harus baik -__getattr__
hanya disebut sebagai upaya terakhir yaitu jika tidak ada atribut dalam contoh yang cocok dengan namanya. Misalnya, jika Anda mengaksesfoo.bar
, maka__getattr__
hanya akan dipanggil jikafoo
tidak memiliki atribut yang dipanggilbar
. Jika atributnya adalah atribut yang tidak ingin Anda tangani, naikkanAttributeError
:Namun, tidak seperti
__getattr__
,__getattribute__
akan dipanggil dulu (hanya berfungsi untuk kelas gaya baru yaitu yang diwariskan dari objek). Dalam hal ini, Anda dapat mempertahankan perilaku default seperti:Lihat dokumen Python untuk informasi lebih lanjut .
sumber
__getattr__
- ada ide apa yang harus dilakukan? (AttributeError: 'super' object has no attribute '__getattr__'
)AttributeError
tanpa konteks atribut dalam args pengecualian.sumber
self.__class__.__name__
harus digunakan sebagai penggantiself.__class__
kalau-kalau kelas menimpa__repr__
Untuk memperluas jawaban Michael, jika Anda ingin mempertahankan perilaku default menggunakan
__getattr__
, Anda dapat melakukannya seperti:Sekarang pesan pengecualian lebih deskriptif:
sumber
__getattr__
dan__getattribute__
?