Kaedah kelas Python ()

Kaedah classmethod () mengembalikan kaedah kelas untuk fungsi yang diberikan.

Sintaks classmethod()kaedah adalah:

 kaedah kelas (fungsi)

classmethod()dianggap tidak Pythonic jadi dalam versi Python yang lebih baru, anda boleh menggunakan @classmethodpenghias untuk definisi kaedah kelas.

Sintaksnya adalah:

 @classmethod def func (kl, args…)

kaedah kelas () Parameter

classmethod() kaedah mengambil satu parameter:

  • fungsi - Fungsi yang perlu ditukar menjadi kaedah kelas

Nilai pulangan dari kaedah kelas ()

classmethod() kaedah mengembalikan kaedah kelas untuk fungsi yang diberikan.

Apakah kaedah kelas?

Kaedah kelas adalah kaedah yang terikat pada kelas dan bukannya objeknya. Ia tidak memerlukan pembuatan contoh kelas, seperti kaedah statik.

Perbezaan antara kaedah statik dan kaedah kelas adalah:

  • Kaedah statik tidak mengetahui apa-apa mengenai kelas dan hanya membincangkan parameternya
  • Kaedah kelas berfungsi dengan kelas kerana parameternya selalu kelas itu sendiri.

Kaedah kelas boleh dipanggil oleh kelas dan objeknya.

 Class.classmethod () Atau bahkan Class (). Classmethod ()

Tetapi tidak kira apa, kaedah kelas selalu dilampirkan pada kelas dengan hujah pertama kerana kelas itu sendiri.

 def classMethod (cls, args…)

Contoh 1: Buat kaedah kelas menggunakan kaedah kelas ()

 class Person: age = 25 def printAge(cls): print('The age is:', cls.age) # create printAge class method Person.printAge = classmethod(Person.printAge) Person.printAge()

Pengeluaran

 Umurnya: 25 

Di sini, kita mempunyai kelas Person, dengan umur berubah-ubah anggota yang ditetapkan kepada 25.

Kami juga mempunyai fungsi printAgeyang mengambil satu parameter cls dan tidak selfbiasanya kami ambil.

cls menerima kelas Personsebagai parameter dan bukannya objek / contoh Orang.

Sekarang, kita lulus kaedah Person.printAgesebagai argumen untuk fungsi classmethod. Ini mengubah kaedah menjadi kaedah kelas sehingga ia menerima parameter pertama sebagai kelas (iaitu Orang).

Pada baris terakhir, kita memanggil printAgetanpa membuat objek Person seperti yang kita lakukan untuk kaedah statik. Ini mencetak umur berubah kelas.

Bilakah anda menggunakan kaedah kelas?

1. Kaedah kilang

Kaedah kilang adalah kaedah yang mengembalikan objek kelas (seperti konstruktor) untuk kes penggunaan yang berbeza.

Ia serupa dengan fungsi berlebihan di C ++. Oleh kerana, Python tidak mempunyai apa-apa, kaedah kelas dan kaedah statik digunakan.

Contoh 2: Buat kaedah kilang menggunakan kaedah kelas

 from datetime import date # random Person class Person: def __init__(self, name, age): self.name = name self.age = age @classmethod def fromBirthYear(cls, name, birthYear): return cls(name, date.today().year - birthYear) def display(self): print(self.name + "'s age is: " + str(self.age)) person = Person('Adam', 19) person.display() person1 = Person.fromBirthYear('John', 1985) person1.display()

Pengeluaran

 Umur Adam ialah: 19 Umur John adalah: 31 

Di sini, kita mempunyai dua pencipta contoh kelas, konstruktor dan fromBirthYearkaedah.

Pembina mengambil parameter dan nama normal umur. Sementara, fromBirthYearmengambil kelas, nama dan kelahiranTahun, mengira usia semasa dengan mengurangkannya dengan tahun semasa dan mengembalikan contoh kelas.

Kaedah fromBirthYear mengambil kelas Person (bukan objek Person) sebagai parameter pertama cl dan mengembalikan konstruktor dengan memanggil cls(name, date.today().year - birthYear), yang setara denganPerson(name, date.today().year - birthYear)

Sebelum kaedahnya, kita lihat @classmethod. Ini dipanggil penghias untuk menukar fromBirthYearke kaedah kelas sebagai classmethod().

2. Pembentukan contoh yang betul dalam pewarisan

Setiap kali anda memperoleh kelas dari melaksanakan kaedah kilang sebagai kaedah kelas, ia memastikan pembuatan contoh yang betul dari kelas turunan.

Anda boleh membuat kaedah statik untuk contoh di atas tetapi objek yang dihasilkannya, akan selalu dikodkan sebagai kelas Asas.

Tetapi, apabila anda menggunakan kaedah kelas, ia akan menghasilkan contoh kelas turunan yang betul.

Contoh 3: Bagaimana kaedah kelas berfungsi untuk pewarisan?

 from datetime import date # random Person class Person: def __init__(self, name, age): self.name = name self.age = age @staticmethod def fromFathersAge(name, fatherAge, fatherPersonAgeDiff): return Person(name, date.today().year - fatherAge + fatherPersonAgeDiff) @classmethod def fromBirthYear(cls, name, birthYear): return cls(name, date.today().year - birthYear) def display(self): print(self.name + "'s age is: " + str(self.age)) class Man(Person): sex = 'Male' man = Man.fromBirthYear('John', 1985) print(isinstance(man, Man)) man1 = Man.fromFathersAge('John', 1965, 20) print(isinstance(man1, Man))

Pengeluaran

 Betul salah 

Di sini, menggunakan kaedah statik untuk membuat instance kelas ingin kita membuat kod keras jenis instance semasa membuat.

Ini jelas menyebabkan masalah apabila mewarisi Personuntuk Man.

fromFathersAgekaedah tidak mengembalikan Manobjek tetapi objek kelas asasnya Person.

Ini melanggar paradigma OOP. Menggunakan kaedah kelas seperti yang fromBirthYeardapat memastikan OOP-ness kod kerana mengambil parameter pertama sebagai kelas itu sendiri dan memanggil kaedah kilang.

Artikel menarik...