Apa itu __ metode __ dengan python?

Metode ajaib di Python adalah metode khusus yang dimulai dan diakhiri dengan garis bawah ganda. Mereka juga disebut metode dunder. Metode ajaib tidak dimaksudkan untuk dipanggil langsung oleh Anda, tetapi pemanggilan terjadi secara internal dari kelas pada tindakan tertentu. Misalnya, ketika Anda menambahkan dua angka menggunakan operator +, secara internal, metode __add__() akan dipanggil

Kelas bawaan di Python menentukan banyak metode ajaib. Gunakan fungsi dir()_ untuk melihat jumlah metode ajaib yang diwariskan oleh suatu kelas. Sebagai contoh, berikut daftar semua atribut dan metode yang didefinisikan dalam kelas int

>>> dir(int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '

Seperti yang Anda lihat di atas, kelas int menyertakan berbagai metode ajaib yang dikelilingi oleh garis bawah ganda. Misalnya, metode __add___ adalah metode ajaib yang dipanggil saat kita menjumlahkan dua angka menggunakan operator +. Perhatikan contoh berikut

>>> bilangan=10
>>> bilangan + 5
15
>>> bilangan. __tambah__(5)
15

Seperti yang Anda lihat, ketika Anda melakukan num+10, operator + memanggil metode __add__(10). Anda juga dapat menghubungi

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
_0 secara langsung yang akan memberikan hasil yang sama. Namun, seperti yang disebutkan sebelumnya, metode sihir tidak dimaksudkan untuk dipanggil secara langsung, tetapi secara internal, melalui beberapa metode atau tindakan lain

Metode ajaib paling sering digunakan untuk mendefinisikan perilaku kelebihan beban dari operator yang telah ditentukan sebelumnya dengan Python. Misalnya, operator aritmatika secara default beroperasi pada operan numerik. Ini berarti objek numerik harus digunakan bersama dengan operator seperti +, -, *, /, dll. Operator + juga didefinisikan sebagai operator penggabungan dalam kelas string, list, dan tuple. Kita dapat mengatakan bahwa + operator kelebihan beban

Untuk membuat perilaku kelebihan muatan tersedia di kelas khusus Anda sendiri, metode ajaib yang sesuai harus diganti. Misalnya, untuk menggunakan + operator dengan objek dari kelas yang ditentukan pengguna, itu harus menyertakan metode __add__()

Mari kita lihat bagaimana menerapkan dan menggunakan beberapa metode sulap yang penting

__baru__() metode

Bahasa seperti Java dan C# menggunakan operator baru untuk membuat turunan baru dari sebuah kelas. Dalam Python, metode ajaib

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
2 secara implisit dipanggil sebelum metode
class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
3. Metode
class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
2 mengembalikan objek baru, yang kemudian diinisialisasi oleh
class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
3

Contoh. __baru__()

Salinan

class Employee:
    def __new__(cls):
        print ("__new__ magic method is called")
        inst = object.__new__(cls)
                return inst
    def __init__(self):
        print ("__init__ magic method is called")
        self.name='Satya'

Contoh di atas akan menghasilkan keluaran berikut saat Anda membuat turunan dari kelas

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
6

>>> emp = Pegawai()
__new__ metode ajaib disebut
__init__ metode ajaib disebut

Jadi, metode

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
2 dipanggil sebelum metode
class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
3

__str__() metode

Metode sulap lain yang berguna adalah

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
_9. Itu diganti untuk mengembalikan representasi string yang dapat dicetak dari kelas yang ditentukan pengguna. Kami telah melihat
class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __add__(self,x):
        temp=distance()
        temp.ft=self.ft+x.ft
        temp.inch=self.inch+x.inch
        if temp.inch>=12:
            temp.ft+=1
            temp.inch-=12
            return temp
    def __str__(self):
        return 'ft:'+str(self.ft)+' in: '+str(self.inch)
0 fungsi bawaan yang mengembalikan string dari parameter objek. Misalnya,
class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __add__(self,x):
        temp=distance()
        temp.ft=self.ft+x.ft
        temp.inch=self.inch+x.inch
        if temp.inch>=12:
            temp.ft+=1
            temp.inch-=12
            return temp
    def __str__(self):
        return 'ft:'+str(self.ft)+' in: '+str(self.inch)
_1 mengembalikan '12'. Saat dipanggil, ia memanggil metode
class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
_9 di kelas int

>>> bilangan=12
>>> str(bil)
'12'
>>> #Ini setara dengan
>>> int. __str__(bil)
'12'

Mari kita ganti metode

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
9 di kelas Karyawan untuk mengembalikan representasi string dari objeknya

Contoh. __str__()

Salinan

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)

Lihat bagaimana fungsi

class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __add__(self,x):
        temp=distance()
        temp.ft=self.ft+x.ft
        temp.inch=self.inch+x.inch
        if temp.inch>=12:
            temp.ft+=1
            temp.inch-=12
            return temp
    def __str__(self):
        return 'ft:'+str(self.ft)+' in: '+str(self.inch)
_0 secara internal memanggil metode
class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
9 yang didefinisikan dalam kelas Karyawan. Inilah mengapa ini disebut metode ajaib

>>> e1=Karyawan()
>>> cetak(e1)
nama = gaji Swati = $ 10.000

__add__() metode

Dalam contoh berikut, sebuah class bernama distance didefinisikan dengan dua atribut instance - ft dan inch. Penambahan dua objek jarak ini diinginkan untuk dilakukan dengan menggunakan operator + overloading

Untuk mencapai ini, metode ajaib __add__() diganti, yang melakukan penambahan atribut kaki dan inci dari dua objek. Metode

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary)
9 mengembalikan representasi string objek

Contoh. Ganti __add__()

Salinan

class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __add__(self,x):
        temp=distance()
        temp.ft=self.ft+x.ft
        temp.inch=self.inch+x.inch
        if temp.inch>=12:
            temp.ft+=1
            temp.inch-=12
            return temp
    def __str__(self):
        return 'ft:'+str(self.ft)+' in: '+str(self.inch)

Jalankan skrip Python di atas untuk memverifikasi operasi + operator yang kelebihan beban

>>> d1=jarak(3,10)
>>> d2=jarak(4,4)
>>> cetak("d1= {} d2={}". format(d1, d2))
d1= kaki. 3 masuk. 10 d2=ft. 4 masuk. 4
>>> d3=d1+d2
>>> cetak(d3)
kaki. 8 masuk. 2

__ge__() metode

Metode berikut ditambahkan di kelas jarak untuk membebani operator

class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __add__(self,x):
        temp=distance()
        temp.ft=self.ft+x.ft
        temp.inch=self.inch+x.inch
        if temp.inch>=12:
            temp.ft+=1
            temp.inch-=12
            return temp
    def __str__(self):
        return 'ft:'+str(self.ft)+' in: '+str(self.inch)
8

Contoh. __ge__()

Salinan

class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __ge__(self, x):
        val1=self.ft*12+self.inch
        val2=x.ft*12+x.inch
        if val1>=val2:
            return True
        else:
            return False

Metode ini dipanggil saat operator

class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __add__(self,x):
        temp=distance()
        temp.ft=self.ft+x.ft
        temp.inch=self.inch+x.inch
        if temp.inch>=12:
            temp.ft+=1
            temp.inch-=12
            return temp
    def __str__(self):
        return 'ft:'+str(self.ft)+' in: '+str(self.inch)
8 digunakan dan mengembalikan Benar atau Salah. Dengan demikian, pesan yang sesuai dapat ditampilkan

>>> d1=jarak(2,1)
>>> d2=jarak(4,10)
>>> d1>=d2
PALSU

Metode Sihir Penting

Tabel berikut mencantumkan metode sihir penting di Python 3

Initialization and ConstructionDescription__new__(cls, other)Untuk dipanggil dalam instantiasi objek. __init__(self, other)Untuk dipanggil dengan metode __new__. __del__(self)Metode destruktor

Operator dan fungsi unaryDeskripsi__pos__(self)Untuk dipanggil untuk unary positive e. g. + beberapa objek. __neg__(self)Untuk dipanggil untuk unary negatif e. g. -beberapa objek. __abs__(self) Untuk dipanggil dengan fungsi abs() bawaan. __invert__(self)Untuk dipanggil untuk inversi menggunakan operator ~. __round__(self,n) Untuk dipanggil dengan fungsi built-in round(). __floor__(self)Untuk dipanggil dengan matematika bawaan. lantai() fungsi. __ceil__(self) Untuk dipanggil dengan matematika bawaan. fungsi ceil(). __trunc__(self) Untuk dipanggil dengan matematika bawaan. fungsi trunc()

Augmented AssignmentDescription__iadd__(self, other)To get called on addition with assignment e.g. a +=b.__isub__(self, other)To get called on subtraction with assignment e.g. a -=b.__imul__(self, other)To get called on multiplication with assignment e.g. a *=b.__ifloordiv__(self, other)To get called on integer division with assignment e.g. a //=b.__idiv__(self, other)To get called on division with assignment e.g. a /=b.__itruediv__(self, other)To get called on true division with assignment__imod__(self, other)To get called on modulo with assignment e.g. a%=b.__ipow__(self, other)To get called on exponentswith assignment e.g. a **=b.__ilshift__(self, other)To get called on left bitwise shift with assignment e.g. a<<=b.__irshift__(self, other)To get called on right bitwise shift with assignment e.g. a >>=b.__iand__(self, other)To get called on bitwise AND with assignment e.g. a&=b.__ior__(self, other)To get called on bitwise OR with assignment e.g. a|=b.__ixor__(self, other)To get called on bitwise XOR with assignment e.g. a ^=b.

Ketik Metode Ajaib KonversiDeskripsi__int__(self)Untuk dipanggil dengan metode built-int int() untuk mengonversi tipe menjadi int. __float__(self)Untuk dipanggil dengan metode built-int float() untuk mengubah tipe menjadi float. __complex__(self)Untuk dipanggil dengan metode built-int complex() untuk mengubah tipe menjadi kompleks. __oct__(self)Untuk dipanggil dengan metode built-int oct() untuk mengubah tipe menjadi oktal. __hex__(self)Untuk dipanggil dengan metode built-int hex() untuk mengubah tipe menjadi heksadesimal. __index__(self)Untuk dipanggil pada konversi tipe ke int saat objek digunakan dalam ekspresi irisan. __trunc__(self) Untuk dipanggil dari matematika. metode trunc()

String Magic MethodsDescription__str__(self)Untuk dipanggil dengan metode built-int str() untuk mengembalikan representasi string dari suatu tipe. __repr__(self)Untuk dipanggil dengan metode built-int repr() untuk mengembalikan representasi tipe yang dapat dibaca mesin. __unicode__(self)Untuk dipanggil dengan metode built-int unicode() untuk mengembalikan string unicode dari suatu tipe. __format__(self,formatstr)Untuk dipanggil dengan built-int string. format() metode untuk mengembalikan gaya string baru. __hash__(self)Untuk dipanggil dengan metode built-int hash() untuk mengembalikan bilangan bulat. __nonzero__(self)Untuk dipanggil dengan metode built-int bool() untuk mengembalikan True atau False. __dir__(self)Untuk dipanggil dengan metode built-int dir() untuk mengembalikan daftar atribut kelas. __sizeof__(self) Untuk dipanggil oleh built-int sys. metode getsizeof() untuk mengembalikan ukuran objek

Attribute Magic MethodsDescription__getattr__(self, name)Dipanggil saat mengakses atribut class yang tidak ada. __setattr__(self, name, value)Dipanggil saat menetapkan nilai ke atribut kelas. __delattr__(self, name)Dipanggil saat menghapus atribut kelas

Metode Ajaib OperatorDeskripsi__add__(self, other)Untuk dipanggil pada operasi add menggunakan + operator__sub__(self, other)Untuk dipanggil pada operasi pengurangan menggunakan - operator. __mul__(self, other)Untuk dipanggil pada operasi perkalian menggunakan * operator. __floordiv__(self, other)Untuk dipanggil pada operasi pembagian lantai menggunakan // operator. __truediv__(self, other)Untuk dipanggil pada operasi pembagian menggunakan / operator. __mod__(self, other)Untuk dipanggil pada operasi modulo menggunakan % operator. __pow__(self, other[, modulo])Untuk dipanggil menghitung daya menggunakan ** operator. __lt__(self, other)Untuk dipanggil pada perbandingan menggunakan < operator. __le__(self, other)Untuk dipanggil pada perbandingan menggunakan = operator

Apa itu metode __ panggilan __ di Python?

__panggilan__() . Dalam Python, __call__() adalah digunakan untuk menyelesaikan kode yang terkait dengan objek yang dapat dipanggil . Objek apa pun dapat dikonversi menjadi objek yang dapat dipanggil hanya dengan menuliskannya dalam format pemanggilan fungsi.

Apa yang dilakukan metode __ Add__?

Python __add__() adalah salah satu metode ajaib dalam Python yang mengembalikan objek baru(ketiga) i. e. penambahan dua objek lainnya . Ini mengimplementasikan operator tambahan "+" dengan Python.

Apa itu __ metode __ baru di Python?

Python __new__() adalah metode konstruktor yang mengontrol pembuatan instance baru . Ini disebut pertama dan mengembalikan instance kelas baru. Python __init__() adalah metode penginisialisasi untuk mengatur atribut (mis. e. , state) dari instance yang baru dibuat. Itu disebut setelah penciptaan dan tidak mengembalikan apa pun, mis. e. , Tidak ada.

Apa arti __ di Python?

Awalan garis bawah dimaksudkan sebagai petunjuk untuk pemrogram lain bahwa variabel atau metode yang dimulai dengan satu garis bawah ditujukan untuk penggunaan internal . Konvensi ini didefinisikan dalam PEP 8. Ini tidak ditegakkan oleh Python. Python tidak memiliki perbedaan yang kuat antara variabel "pribadi" dan "publik" seperti yang dimiliki Java.