Metode kelas Python ()

Metode classmethod () mengembalikan metode kelas untuk fungsi yang diberikan.

Sintaks classmethod()metode adalah:

 classmethod (fungsi)

classmethod()dianggap tidak Pythonic sehingga dalam versi Python yang lebih baru, Anda dapat menggunakan @classmethoddekorator untuk definisi metode kelas .

Sintaksnya adalah:

 @classmethod def func (cls, args…)

classmethod () Parameter

classmethod() metode mengambil satu parameter:

  • function - Fungsi yang perlu diubah menjadi metode kelas

Kembalikan nilai dari classmethod ()

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

Apa itu metode kelas?

Metode kelas adalah metode yang terikat ke kelas, bukan objeknya. Itu tidak memerlukan pembuatan instance kelas, seperti metode statis.

Perbedaan antara metode statis dan metode kelas adalah:

  • Metode statis tidak tahu apa-apa tentang kelas dan hanya berurusan dengan parameter
  • Metode kelas bekerja dengan kelas karena parameternya selalu kelas itu sendiri.

Metode kelas dapat dipanggil baik oleh kelas maupun objeknya.

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

Tapi apapun yang terjadi, metode kelas selalu dilampirkan ke kelas dengan argumen pertama sebagai kelas itu sendiri.

 def classMethod (cls, args…)

Contoh 1: Membuat metode kelas menggunakan classmethod ()

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

Keluaran

 Umurnya: 25 

Di sini, kami memiliki kelas Person, dengan usia variabel anggota ditetapkan ke 25.

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

cls menerima kelas Personsebagai parameter daripada objek / instance Orang.

Sekarang, kami meneruskan metode Person.printAgesebagai argumen ke fungsi tersebut classmethod. Ini mengubah metode menjadi metode kelas sehingga menerima parameter pertama sebagai kelas (yaitu Orang).

Pada baris terakhir, kita memanggil printAgetanpa membuat objek Person seperti yang kita lakukan untuk metode statis. Ini mencetak usia variabel kelas.

Kapan Anda menggunakan metode kelas?

1. Metode pabrik

Metode pabrik adalah metode yang mengembalikan objek kelas (seperti konstruktor) untuk kasus penggunaan yang berbeda.

Ini mirip dengan fungsi overloading di C ++. Karena, Python tidak memiliki hal seperti itu, metode kelas dan metode statis digunakan.

Contoh 2: Buat metode pabrik menggunakan metode 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()

Keluaran

 Usia Adam: 19 Usia John: 31 

Di sini, kami memiliki dua pembuat instance kelas, konstruktor dan fromBirthYearmetode.

Konstruktor mengambil nama dan usia parameter normal. While, fromBirthYeartake class, name and birthYear, menghitung usia saat ini dengan menguranginya dengan tahun saat ini dan mengembalikan instance kelas.

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

Sebelum metode, kita lihat @classmethod. Ini disebut dekorator untuk mengonversi fromBirthYearke metode kelas sebagai classmethod().

2. Benar pembuatan instance dalam warisan

Setiap kali Anda mendapatkan kelas dari mengimplementasikan metode pabrik sebagai metode kelas, ini memastikan pembuatan instance yang benar dari kelas turunan.

Anda dapat membuat metode statis untuk contoh di atas tetapi objek yang dibuatnya, akan selalu di-hardcode sebagai kelas Base.

Tapi, ketika Anda menggunakan metode kelas, itu membuat instance yang benar dari kelas turunan.

Contoh 3: Bagaimana metode kelas bekerja untuk warisan?

 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))

Keluaran

 Benar salah 

Di sini, menggunakan metode statis untuk membuat instance kelas meminta kita untuk melakukan hardcode jenis instance selama pembuatan.

Ini jelas menyebabkan masalah saat mewarisi Personke Man.

fromFathersAgemetode tidak mengembalikan Manobjek tetapi objek kelas dasarnya Person.

Ini melanggar paradigma OOP. Menggunakan metode kelas yang fromBirthYeardapat memastikan OOP-ness kode karena ia mengambil parameter pertama sebagai kelas itu sendiri dan memanggil metode pabriknya.

Artikel yang menarik...