Питхон цлассметход ()

Метода цлассметход () враћа методу класе за дату функцију.

Синтакса classmethod()методе је:

 цлассметход (функција)

classmethod()сматра се не-Питхониц-ом, тако да у новијим верзијама Питхон-а можете користити @classmethodдекоратер за дефинисање цлассметход-а.

Синтакса је:

 @цлассметход деф фунц (цлс, аргс …)

цлассметход () Параметри

classmethod() метода узима један параметар:

  • функција - функција коју треба претворити у методу класе

Врати вредност из цлассметход ()

classmethod() метода враћа метод класе за дату функцију.

Шта је метода класе?

Метода класе је метода која је везана за класу, а не за њен објекат. Не захтева стварање инстанце класе, слично као статицметход.

Разлика између статичке методе и методе класе је:

  • Статичка метода не зна ништа о класи и само се бави параметрима
  • Метода класе ради са класом, јер је њен параметар увек сама класа.

Метод класе могу позвати и класа и њен објекат.

 Цласс.цлассметход () Или чак Цласс (). Цлассметход ()

Али без обзира на све, метода класе је увек везана за класу са првим аргументом док се класа цлс.

 деф цлассМетход (цлс, аргс …)

Пример 1: Креирајте методу класе користећи цлассметход ()

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

Оутпут

 Старост је: 25 година 

Овде имамо класу Person, чији је узраст члана додељен 25.

Такође имамо функцију printAgeкоја узима један параметар цлс, а не selfобично.

цлс прихвата класу Personкао параметар, а не као објект / инстанцу особе.

Сада преносимо методу Person.printAgeкао аргумент функцији classmethod. Ово претвара методу у методу класе тако да прихвата први параметар као класу (тј. Особа).

У последњем реду позивамо printAgeбез стварања објекта Персон као што то чинимо за статичке методе. Ово штампа променљиву старост класе.

Када користите метод класе?

1. Фабричке методе

Фабричке методе су оне методе које враћају објект класе (попут конструктора) за различите случајеве употребе.

Слично је преоптерећењу функција у Ц ++. Пошто Питхон нема ништа као такво, користе се методе класе и статичке методе.

Пример 2: Креирајте фабричку методу помоћу методе класе

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

Оутпут

 Адамово доба је: 19 Јованово доба је: 31 

Овде имамо два креатора инстанце класе, конструктор и fromBirthYearметод.

Конструктор узима нормалне параметре име и старост. Док fromBirthYearузима разред, име и годину рођења, израчунава тренутну старост одузимајући је од текуће године и враћа инстанцу класе.

Метода фромБиртхИеар узима класу Персон (а не објект Персон) као први параметар цлс и враћа конструктор позивањем cls(name, date.today().year - birthYear), што је еквивалентноPerson(name, date.today().year - birthYear)

Пре методе видимо @classmethod. Ово се назива декоратор за претварање fromBirthYearу метод класе као classmethod().

2. Исправно стварање инстанце у наслеђивању

Кад год изведете класу из примене фабричке методе као методе класе, она обезбеђује правилно стварање инстанце изведене класе.

За горњи пример можете створити статичку методу, али објекат који он креира увек ће бити кодиран као основна класа.

Али, када користите метод класе, он креира исправну инстанцу изведене класе.

Пример 3: Како метода класе ради за наслеђивање?

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

Оутпут

 Тачно нетачно 

Овде употреба статичке методе за креирање инстанце класе жели да током израде чврсто кодирамо тип инстанце.

Ово јасно узрокује проблем када наслеђивања Personу Man.

fromFathersAgeметода не враћа Manобјекат већ објекат основне класе Person.

Ово крши ООП парадигму. Коришћење методе класе fromBirthYearможе осигурати ООП-ову код, јер узима први параметар као класу и позива своју фабричку методу.

Занимљиви Чланци...