-
Notifications
You must be signed in to change notification settings - Fork 0
/
static_and_class_methods.py
97 lines (73 loc) · 2.22 KB
/
static_and_class_methods.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Existen varios tipos de métodos de clase
# Métodos de instancia
#
# Son los métodos básicos o 'normales'
# Son los métodos que definen comportimientos de objetos de la clase
# sólo se pueden referenciar a través de instancias de la clase, y su primer argumento es self
# Self apunta a una instancia de la clase a la que pertenecen
# A través de self, una instancia puede acceder a atributos y propiedades del objeto
# también pueden acceder a la misma clase con el atributo self.__class__
# Métodos de clase
#
# Se definen con el decorador @classmethod
# Son métodos que no defien el compartimiento de una instancia, si no de la clase
# en lugar de self, reciben como primer parámetro cls, que es el acrónimo de Python para Class
# al no tener acceso a self, no pueden moficar el el estado del objeto o de la clase
# Metodos estáticos
#
# No recibe ni cls ni self
# Se declara con el decorador @staticmethod
import random
from dataclasses import dataclass
class Person:
life_expectancy = 70
def __init__(self):
self.age = 32
self.languaje = "english"
def increase_age(self):
self.age += 1
def get_languaje(self):
print(self)
return self.languaje
@classmethod
def average_life_ex(cls):
print(cls)
return cls.life_expectancy
@staticmethod
def breathe():
print("Sssss!")
class SpanishPerson(Person):
life_expectancy = 84
def __init__(self):
super().__init__()
self.languaje = "spanish"
p = Person()
print(p.get_languaje())
print(p.average_life_ex())
# print(Person.get_languaje())
Person.breathe()
p.breathe()
s = SpanishPerson()
print(s.get_languaje())
print(s.average_life_ex())
# otro ejemplo
@dataclass
class Animal:
especie: str = "mammal"
@staticmethod
def get_random_animal():
all_subcls = [subclass() for subclass in Animal.__subclasses__()]
print(all_subcls)
return random.choice(all_subcls)
@dataclass
class Dog(Animal):
especie: str = "Canino"
legs: int = 4
description: str = "Es un Perro"
@dataclass
class Cat(Animal):
especie: str = "Felino"
legs: int = 4
description: str = "Es un Gato"
animal = Animal.get_random_animal()
print(animal)