Python Self: Apa Penggunaan Diri dalam Python – Codewithaden

Jika Anda memulai pemrograman Python sejak lama, Anda menemukan kata ” diri sendiri.” Diri menemukan Anda kapan pun Anda bekerja Pemrograman berorientasi objek dalam python . Anda telah melihat dalam definisi metode dan inisialisasi variabel. Tetapi sebelum menyelam ke dalam diri, mari kita pahami apa variabel kelas dan instance dan apa metode kelas dan instance.

Variabel kelas dalam python

Variabel kelas adalah jenis variabel yang dibagikan dengan semua contoh kelas itu. Jika Anda mengakses variabel kelas dari instance, maka nilainya akan sama. Variabel kelas didefinisikan tepat setelah definisi kelas dan di luar metode atau fungsi apa pun.

class MyClass:
    var_1 = "COVID_19"
    var_2 = 100
    var_3 = False
 

Dalam kode ini, var_1 , var_2 , dan var_3 adalah variabel kelas.

Variabel instan dalam python

Variabel instan adalah variabel di mana semua instance menjaga untuk diri mereka sendiri (mis., Objek tertentu memiliki variabel instannya). Jadi nilai variabel instance berbeda dari instance ke instance.

class MyClass:
    var_1 = "COVID_19"
    var_2 = 100
    var_3 = False


def __init__(self, param1, param2):
    self.instance_var1 = param1
    # instance_var1 is a instance variable
    
    self.instance_var2 = param2
    # instance_var2 is a instance variable
 

Dalam kode ini, variabel instance Instace_var1 dan instance_var2

Berbeda dengan variabel kelas, variabel instan harus didefinisikan dalam metode.

class MyClass:
    var_1 = "COVID_19"
    var_2 = 100
    var_3 = False

    def __init__(self, param1, param2, param3):
        self.instance_var1 = param1
        # instance_var1 is a instance variable

        self.instance_var2 = param2
        # instance_var2 is a instance variable

        self.instance_var3 = param3
        # instance_var3 is a instance variable


obj1 = MyClass('Disease', 150, True)
print('The class variable is: ', obj1.var_1)
print('The instance variable is: ', obj1.instance_var1)

obj2 = MyClass('Rasparatory', 200, False)
print('The class variable is: ', obj2.var_1)
print('The instance variable is: ', obj2.instance_var2)
 

Dalam contoh ini, kami telah mendefinisikan tiga variabel kelas dan tiga variabel instance.

Kemudian kami telah membuat dua contoh yang disebut Obj1 dan obj2

Sekarang, jika Anda mengakses variabel kelas dengan OBJ1 dan OBJ2, nilainya akan sama. Jadi dalam contoh kami, kami memiliki akses ke var_1 dan var_2 dengan instance yang berbeda, dan nilai sama seperti yang Anda lihat di output.

Tetapi ketika kita mengakses variabel instance dengan instance yang berbeda, nilainya berbeda. Ini karena kami memberikan nilai melalui __init __ () metode, dan dengan demikian, nilai -nilai berbeda dari instance ke contoh.

Metode Kelas dalam Python

Metode kelas bermanfaat untuk mengatur atau mendapatkan detail (status) kelas. Metode kelas memiliki parameter tertentu yang harus ditempatkan sebagai parameter pertama. Ini adalah sebuah cls parameter, yang mewakili kelas.

class MyClass:
    var_1 = "COVID_19"
    var_2 = 100
    var_3 = False

    @classmethod
    def class_method(cls):
        print("the class method was called")
        return 1


print(MyClass.class_method())
print(MyClass.var_1)
print(MyClass.var_2)
print(MyClass.var_3)
 

Dalam contoh ini, kami telah mendefinisikan metode kelas menggunakan @ClassMethod Decorator . ClassMethod di sini adalah class_method, yang dibutuhkan cls sebagai parameter. Itu sama seperti diri sendiri Saat membuat metode instan.

Jadi, saat kami mendefinisikan metode kelas, kami lulus cls Sebagai parameter pertama, dan ketika kami mendefinisikan metode instan, kami melewati diri sendiri sebagai parameter pertama.

Kemudian kami telah mengakses Method menggunakan Class dan bukan Object. Kami juga telah mengakses variabel kelas menggunakan kelas. Jadi, tanpa membuat objek, kita dapat mengakses metode kelas sebagai berikut.

MyClass.class_method() 

Jadi, ini adalah cara Anda dapat mendefinisikan dan mengakses metode kelas dalam Python.

Metode contoh dalam python

Oke, kita telah melihat variabel instance, variabel kelas, dan metode kelas. Sekarang, kita akan melihat metode instance.

Saat mendefinisikan metode instan, parameter pertama metode harus selalu diri sendiri . Namun, orang dapat menamainya apa pun yang Anda inginkan dan tidak harus sendiri, tetapi apa yang diwakili argumen itu akan selalu sama. Dan itu adalah ide yang lebih baik untuk bertahan dengan diri sendiri karena ini adalah konvensi global.

class MyClass:

    def add(self, a, b):
        return a + b


obj = MyClass()
print(obj.add(11, 21))
 

Dalam contoh ini, kami mendefinisikan metode instance yang disebut menambahkan(), yang membutuhkan dua parameter.

Kemudian kami telah membuat objek dan memanggil menambahkan() metode.

Jadi seperti yang dapat Anda perhatikan dari kode di atas, meskipun saat mendefinisikan metode instance, parameter pertama adalah diri sendiri; Saat kita menyebut metode itu, kita tidak melewati apa pun diri sendiri sebagai argumen.

Apa itu Python Self

Kata kunci diri mewakili instance (objek) dari kelas yang diberikan. Misalnya, objek OBJ memiliki atribut A dan B sendiri dalam kasus di atas. Jika tidak ada argumen diri, maka kelas yang sama tidak dapat berisi informasi untuk kedua objek ini.

Namun, karena kelas adalah cetak biru, diri memungkinkan akses ke atribut dan metode masing -masing objek dalam Python. Ini memungkinkan setiap objek untuk memiliki atribut dan metode. Bahkan jauh sebelum membuat objek -objek ini, kami merujuk objek sebagai diri saat mendefinisikan kelas.

Mendefinisikan diri secara eksplisit

Bahkan ketika kita mengetahui penggunaan diri, itu mungkin tampak aneh, terutama bagi pemrogram dari bahasa pemrograman lain. Diri disahkan sebagai argumen secara eksplisit setiap kali kita mendefinisikan metode instance.

class MyClass:

    def __init__(self, a, b):
        self.a = a
        self.b = b

    def multi(self):
        return self.a * self.b


obj = MyClass(3, 7)
print('The multiplication of a and b is: ', obj.multi())
 

Jika Anda menjalankan kode di atas, Anda akan mendapatkan output berikut.

The multiplication of a and b is:  21 

Dalam contoh di atas, __init __ () mendefinisikan tiga parameter, tetapi kami baru saja melewati dua (3 dan 7). Demikian pula, fungsi multi () membutuhkan satu, tetapi nol argumen disahkan ketika memanggil fungsi obj.multi (). Jadi kenapa ini tidak memberikan kesalahan?

Apa yang terjadi di bawah kap mesin

Ketika kami memanggil metode instan dengan beberapa parameter, fungsi kelas korelatif dipanggil dengan menempatkan objek metode sebelum parameter pertama. Jadi, apapun seperti Obj.Multi (Args) menjadi Class.multi (obj, args) . Proses panggilan otomatis, sedangkan proses penerima tidak (eksplisit).

Ini adalah alasan utama argumen pertama fungsi di kelas harus menjadi objek itu sendiri. Menulis parameter ini sebagai diri sendiri adalah konvensi. Ini bukan kata kunci dan tidak memiliki makna khusus dalam Python.

Kita bisa menggunakan nama lain, tetapi sangat tidak dianjurkan. Menggunakan nama selain diri disukai oleh sebagian besar pengembang dan menurunkan keterbacaan kode.

Jelas bahwa suatu objek (instance) itu sendiri secara otomatis diteruskan sebagai argumen pertama. Perilaku implisit dapat dihindari saat membuat a statis metode. Kami telah melihat Metode kelas sebelumnya di posting ini.

Diri eksplisit tidak unik untuk Python. Gagasan itu dipinjam dari Modula-3

Python __init __ ()

Python __init __ () Metode bukan konstruktor. Banyak programmer candid menjadi bingung dengan itu sejak itu __init __ () Dipanggil saat kita membuat objek.

Jika Anda memeriksanya dengan cermat, Anda dapat melihat bahwa parameter pertama di __init __ () adalah objek itu sendiri (objek sudah ada). Fungsinya __init __ () dipanggil langsung setelah objek dibuat dan digunakan untuk menginisialisasi.

Secara teknis, konstruktor adalah metode yang membuat objek itu sendiri. Dalam Python, metode ini __baru__() . Tanda tangan khas dari metode ini adalah sebagai berikut.

__new__(cls, *args, **kwargs) 

Ketika metode __new __ () dipanggil, kelas secara otomatis dilewatkan sebagai argumen pertama (CLS).

Sekali lagi, seperti diri sendiri, CLS hanyalah konvensi penamaan. Selanjutnya, The *args dan ** kwargs digunakan untuk mengambil jumlah parameter yang sewenang -wenang selama panggilan fungsi dalam python.

Beberapa hal yang bermakna untuk diingat saat menerapkan __baru__() adalah:

  1. Itu __baru__() selalu dipanggil sebelumnya __init __ ()
  2. Argumen pertama adalah kelas itu sendiri, yang disahkan secara implisit.
  3. Selalu kembalikan objek yang valid dari __baru__() . Bukan wajib, tetapi penggunaan utamanya adalah untuk membuat dan mengembalikan objek.

Lihat kode berikut.

class MyClass:

    def __new__(cls, *args, **kwargs):
        print("__NEW__")
        print(cls)
        print(args)
        print(kwargs)

        # create our object and return it
        obj = super().__new__(cls)
        return obj

    def __init__(self, a, b):
        self.a = a
        self.b = b

    def multi(self):
        return self.a * self.b


obj = MyClass(3, 7)
print('The multiplication of a and b is: ', obj.multi())
 

Keluaran

__NEW__

(3, 7)
{}
The multiplication of a and b is:  21 

Contoh ini menggambarkan itu __baru__() disebut sebelumnya __init __ () . Kita juga dapat melihat bahwa parameter CLS masuk __baru__() adalah kelas itu sendiri (titik).

Akhirnya, objek dibuat dengan memanggil __baru__() Metode pada kelas dasar objek.

Dalam Python, suatu objek adalah kelas dasar dari mana semua kelas lain diturunkan. Dalam kode di atas, kami telah melakukan ini menggunakan super()

Kesimpulan

Sekarang Anda harus selalu menggunakan diri sendiri Sebagai parameter pertama dari metode instance di Python dan apa yang terjadi di belakang adegan ketika kita menyebut metode instance. Kami telah melihat variabel kelas dan instance, metode kelas dan instance, diri, mengapa kami menggunakan diri sendiri, konvensi nama diri.

Itu untuk diri Python.

Artikel ini berasal dari website Winpoin, dan kemudian diterjemahkan ke bahasa indonesia, baca artikel asli disini

Leave a Reply

Your email address will not be published. Required fields are marked *