Python osztálymódszer ()

A classmethod () metódus egy osztály metódust ad vissza az adott függvényhez.

A classmethod()módszer szintaxisa :

 osztálymódszer (függvény)

classmethod()nem @classmethodPythonic-nak számít , ezért az újabb Python-verziókban a dekoratort használhatja az osztálymódszer meghatározásához.

A szintaxis a következő:

 @classmethod def func (cls, args…)

classmethod () Paraméterek

classmethod() A módszer egyetlen paramétert vesz fel:

  • function - Funkció, amelyet osztálymódszerré kell átalakítani

Visszatérési érték az osztálymódszertől ()

classmethod() A method egy osztályfüggvényt ad vissza az adott függvényhez.

Mi az osztály módszer?

Az osztály metódus az osztályhoz, nem pedig az objektumhoz kötött módszer. Ehhez nem szükséges osztálypéldány létrehozása, csakúgy, mint a statikus módszer.

A statikus és az osztályos módszer közötti különbség a következő:

  • A statikus módszer nem tud semmit az osztályról, és csak a paraméterekkel foglalkozik
  • A Class módszer az osztállyal működik, mivel a paramétere mindig maga az osztály.

Az class metódust az osztály és az objektuma egyaránt meghívhatja.

 Class.classmethod () Vagy akár Class (). Classmethod ()

De nem számít, az class metódus mindig egy osztályhoz van kötve az első argumentummal, mivel maga az osztály cls.

 def classMethod (cls, args…)

1. példa: Osztálymódszer létrehozása classmethod () használatával

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

Kimenet

 Az életkor: 25 

Itt van egy osztályunk Person, tagjának változó kora 25 év.

Van egy olyan funkciónk is printAge, amely egyetlen paramétert vesz cls-re, és nem selfmi szoktuk.

A cls az osztályt Personparaméterként fogadja el, nem pedig a Person objektumát / példányát.

Most a metódust Person.printAgeargumentumként adjuk át a függvénynek classmethod. Ez átalakítja a módszert osztály metódussá úgy, hogy az első paramétert osztályként (azaz Személyként) fogadja el.

Az utolsó sorban printAgeszemélyi objektum létrehozása nélkül hívunk , mint a statikus módszerekhez. Ez kinyomtatja az osztály változó életkorát.

Mikor használja az osztály módszerét?

1. Gyári módszerek

A gyári módszerek azok a módszerek, amelyek osztályobjektumot (például konstruktort) adnak vissza különböző felhasználási esetekhez.

Hasonló a funkció túlterheléséhez C ++ - ban. Mivel a Pythonnak nincs semmi, mint ilyen, osztály- és statikus módszereket használnak.

2. példa: Készítsen gyári módszert osztálymódszerrel

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

Kimenet

 Ádám életkora: 19 János életkora: 31 

Itt két osztálypéldány-készítőnk van, egy konstruktor és egy fromBirthYearmódszer.

The constructor takes normal parameters name and age. While, fromBirthYear takes class, name and birthYear, calculates the current age by subtracting it with the current year and returns the class instance.

The fromBirthYear method takes Person class (not Person object) as the first parameter cls and returns the constructor by calling cls(name, date.today().year - birthYear), which is equivalent to Person(name, date.today().year - birthYear)

Before the method, we see @classmethod. This is called a decorator for converting fromBirthYear to a class method as classmethod().

2. Correct instance creation in inheritance

Whenever you derive a class from implementing a factory method as a class method, it ensures correct instance creation of the derived class.

You can create a static method for the above example but the object it creates, will always be hardcoded as Base class.

De ha osztálymódszert használ, akkor létrehozza a levezetett osztály helyes példányát.

3. példa: Hogyan működik az osztály módszer az öröklésnél?

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

Kimenet

 Igaz hamis 

Itt egy statikus módszer segítségével osztálypéldány létrehozása azt akarja, hogy a létrehozás során kemény kódot adjunk a példánytípusnak.

Ez egyértelműen okoz problémát, ha örökli Persona Man.

fromFathersAgeA metódus nem egy Manobjektumot, hanem annak alaposztályának Personobjektumát adja vissza.

Ez sérti az OOP paradigmáját. A class metódus fromBirthYearhasználatával biztosítható a kód OOP-jellege, mivel az első paramétert maga az osztály veszi, és meghívja a gyári metódust.

érdekes cikkek...