Meskipun jawaban yang diterima tepat, saya ingin menambahkan sedikit deskripsi.
Mari kita lakukan latihan kecil
pertama-tama tentukan kelas sebagai berikut:
class A:
temp = 'Skyharbor'
def __init__(self, x):
self.x = x
def change(self, y):
self.temp = y
Jadi apa yang kita miliki di sini?
- Kami memiliki kelas yang sangat sederhana yang memiliki atribut
tempyang berupa string
- Sebuah
__init__metode yang setself.x
- Set metode perubahan
self.temp
Cukup lurus ke depan sejauh ini ya? Sekarang mari kita mulai bermain-main dengan kelas ini. Mari kita inisialisasi kelas ini terlebih dahulu:
a = A('Tesseract')
Sekarang lakukan hal berikut:
>>> print(a.temp)
Skyharbor
>>> print(A.temp)
Skyharbor
Yah, a.tempbekerja seperti yang diharapkan tetapi bagaimana sih itu A.tempbekerja? Yah itu berhasil karena temp adalah atribut kelas. Segala sesuatu di python adalah objek. Di sini A juga merupakan objek kelas type. Dengan demikian atribut temp adalah atribut yang dimiliki oleh Akelas dan jika Anda mengubah nilai temp melalui A(dan bukan melalui turunan dari a), nilai yang diubah akan tercermin dalam semua turunan Akelas. Ayo maju dan lakukan itu:
>>> A.temp = 'Monuments'
>>> print(A.temp)
Monuments
>>> print(a.temp)
Monuments
Menarik bukan? Dan perhatikan itu id(a.temp)dan id(A.temp)masih sama .
Setiap objek Python secara otomatis diberikan __dict__atribut, yang berisi daftar atributnya. Mari selidiki apa isi kamus ini untuk objek contoh kami:
>>> print(A.__dict__)
{
'change': <function change at 0x7f5e26fee6e0>,
'__module__': '__main__',
'__init__': <function __init__ at 0x7f5e26fee668>,
'temp': 'Monuments',
'__doc__': None
}
>>> print(a.__dict__)
{x: 'Tesseract'}
Perhatikan bahwa tempatribut terdaftar di antara Aatribut kelas sementara xterdaftar untuk instance.
Jadi bagaimana bisa kita mendapatkan nilai yang ditentukan a.tempjika bahkan tidak terdaftar sebagai contoh a. Nah itulah keajaiban __getattribute__()metode. Dalam Python sintaksis putus-putus secara otomatis memanggil metode ini sehingga ketika kita menulis a.temp, Python mengeksekusi a.__getattribute__('temp'). Metode itu melakukan tindakan pencarian atribut, yaitu menemukan nilai atribut dengan melihat di tempat yang berbeda.
Implementasi standar __getattribute__()pencarian pertama kamus internal ( dikt ) dari suatu objek, kemudian jenis objek itu sendiri. Dalam hal ini a.__getattribute__('temp')dijalankan pertama a.__dict__['temp']dan kemudiana.__class__.__dict__['temp']
Oke sekarang mari kita gunakan changemetode kami :
>>> a.change('Intervals')
>>> print(a.temp)
Intervals
>>> print(A.temp)
Monuments
Nah sekarang kita telah menggunakan self, print(a.temp)memberi kita nilai berbeda print(A.temp).
Sekarang jika kita membandingkan id(a.temp)dan id(A.temp), mereka akan berbeda.
listsebagai nama atribut.listadalah fungsi buil-in untuk membangun daftar baru. Anda harus menulis kelas nama dengan huruf besar.