class Parent(object):
class_var = 'parent_class_var'
@classmethod
def class_method(cls):
print('cls: {}'.format(cls))
print("class_var: {}".format(cls.class_var))
@staticmethod
def static_method(raw_str):
print(raw_str.strip())
if __name__ == '__main__':
raw_str = 'He has been fired\n'
# cls: <class '__main__.Parent'>
# class_var: parent_class_var
Parent.class_method()
# He has been fired
Parent.static_method(raw_str)
parent = Parent()
# cls: <class '__main__.Parent'>
# class_var: parent_class_var
parent.class_method()
# He has been fired
parent.static_method(raw_str)
@ classmethod
et les méthodes statiques avec @ staticmethod
Parce que les méthodes statiques ne prennent pas les classes comme arguments La logique indépendante de la classe sera implémentée en tant que méthode. Cependant, si la méthode ne dépend pas de la classe en premier lieu, ne devrait-elle pas être implémentée en tant que fonction plutôt qu'en tant que méthode dans la classe?
class Child(Parent):
@staticmethod
def static_method(raw_str):
print(raw_str.strip()+'!')
Cependant, les méthodes statiques sont utiles lors de l'héritage d'une classe et de la modification du contenu logique entre parent et enfant. Il peut être implémenté comme une méthode de classe, On peut souligner qu'il s'agit d'un processus indépendant de la classe.
Puisque seules les méthodes statiques existent en C ++ et Java Il est indéniable que l'existence à la fois de méthodes de classe et de méthodes statiques en Python est un peu redondante.
Recommended Posts