método de clase() en Python
El método de clase() es una función incorporada en Python, que devuelve un método de clase para una función determinada.
método de clase () en la sintaxis de Python
Sintaxis: método de clase (función)
Parámetro: Esta función acepta el nombre de la función como parámetro.
Tipo de devolución: Esta función devuelve el método de clase convertido.
Método de clase Python() Función
Los métodos classmethod() están vinculados a una clase en lugar de a un objeto. Los métodos de clase pueden ser llamados tanto por clase como por objeto. Estos métodos se pueden llamar con una clase o con un objeto.
Método de clase versus método estático
La diferencia básica entre el método de clase vs método estático en Python y cuándo usar el método de clase y el método estático en Pitón .
- Un método de clase toma cls como primer parámetro, mientras que un método estático no necesita parámetros específicos.
- Un método de clase puede acceder o modificar el estado de la clase, mientras que un método estático no puede acceder a él ni modificarlo.
- En general, los métodos estáticos no saben nada sobre el estado de la clase. Son métodos de tipo utilidad que toman algunos parámetros y trabajan sobre esos parámetros. Por otro lado, los métodos de clase deben tener la clase como parámetro.
- Usamos el decorador @classmethod en Python para crear un método de clase y usamos el decorador @staticmethod para crear un método estático en Python.
Ejemplo de método de clase en Python
Crear un método de clase simple
En este ejemplo, veremos cómo crear un método de clase en Python. Para esto, creamos una clase llamada Geeks con una variable miembro curso y creamos una función llamada compra que imprime el objeto. Ahora, pasamos el método. Geeks.purchase> en un método de clase usando el @classmethod> decorador, que convierte el método en un método de clase. Con el método de clase implementado, podemos llamar a la función de compra sin crear un objeto de función, usando directamente el nombre de clase Geeks.
Python3
class> geeks:> > course> => 'DSA'> > def> purchase(obj):> > print> (> 'Purchase course : '> , obj.course)> geeks.purchase> => classmethod> (geeks.purchase)> geeks.purchase()> |
Producción
Purchase course : DSA
Crear método de clase usando classmethod()
Creé el método de clase print_name antes de crear esta línea print_name(). Solo se puede llamar con un objeto, no con la clase. Ahora este método se puede llamar como método de clase. El método print_name() se llama método de clase.
Python3
class> Student:> > # create a variable> > name> => 'Geeksforgeeks'> > # create a function> > def> print_name(obj):> > print> (> 'The name is : '> , obj.name)> # create print_name classmethod> # before creating this line print_name()> # It can be called only with object not with class> Student.print_name> => classmethod> (Student.print_name)> # now this method can be called as classmethod> # print_name() method is called a class method> Student.print_name()> |
Producción
The name is : Geeksforgeeks
Método de fábrica usando un método de clase
Los usos de la función classmethod() se utilizan en patrones de diseño de fábrica donde queremos llamar a muchas funciones con el nombre de la clase en lugar de un objeto.
Python3
# Python program to demonstrate> # use of a class method and static method.> from> datetime> import> date> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > # a class method to create a> > # Person object by birth year.> > @classmethod> > def> fromBirthYear(> cls> , name, year):> > return> cls> (name, date.today().year> -> year)> > def> display(> self> ):> > print> (> 'Name : '> ,> self> .name,> 'Age : '> ,> self> .age)> person> => Person(> 'mayank'> ,> 21> )> person.display()> |
Producción
Name : mayank Age : 21
¿Cómo funciona el método de clase para la herencia?
En este ejemplo, estamos creando una jerarquía de clases de Python con dos clases, Person> y Man> y demuestra el uso de métodos de clase y herencia.
Python3
from> datetime> import> date> # random Person> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > @staticmethod> > def> from_FathersAge(name, fatherAge, fatherPersonAgeDiff):> > return> Person(name, date.today().year> -> fatherAge> +> fatherPersonAgeDiff)> > @classmethod> > def> from_BirthYear(> 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> => 'Female'> man> => Man.from_BirthYear(> 'John'> ,> 1985> )> print> (> isinstance> (man, Man))> man1> => Man.from_FathersAge(> 'John'> ,> 1965> ,> 20> )> print> (> isinstance> (man1, Man))> |
Producción
True False
Decorador @classmethod de Python
El decorador @classmethod está integrado decorador de funciones que es una expresión que se evalúa después de definir la función. El resultado de esa evaluación ensombrece la definición de su función. Un método de clase recibe la clase como primer argumento implícito, al igual que un método de instancia recibe la instancia.
Sintaxis del decorador de método de clase
clase C (objeto):
@métododeclase
def diversión(cls, arg1, arg2,…):
….
Dónde,
- divertido: la función que necesita ser convertida en un método de clase
- devoluciones: un método de clase para función.
Nota:
- Un método de clase es un método que está vinculado a la clase y no al objeto de la clase.
- Tienen acceso al estado de la clase, ya que requiere un parámetro de clase que apunta a la clase y no a la instancia del objeto.
- Puede modificar el estado de una clase que se aplicaría en todas las instancias de la clase. Por ejemplo, puede modificar una variable de clase que sería aplicable a todas las instancias.
Ejemplo
En el siguiente ejemplo, utilizamos un método estático() y un método de clase() para comprobar si una persona es adulta o no.
Python3
# Python program to demonstrate> # use of a class method and static method.> from> datetime> import> date> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > # a class method to create a> > # Person object by birth year.> > @classmethod> > def> fromBirthYear(> cls> , name, year):> > return> cls> (name, date.today().year> -> year)> > # a static method to check if a> > # Person is adult or not.> > @staticmethod> > def> isAdult(age):> > return> age>> 18> person1> => Person(> 'mayank'> ,> 21> )> person2> => Person.fromBirthYear(> 'mayank'> ,> 1996> )> print> (person1.age)> print> (person2.age)> # print the result> print> (Person.isAdult(> 22> ))> |
Producción
21 27 True