Procédé python méthode statique d'instance de classe Méthode

Méthode de classe 1

@classmethod
volonté un procédé de conditionnement d' une méthode de classe.

Une méthode de classe de classe pour lui-même comme le premier argument, par exemple, d'un procédé de l'exemple eux-mêmes en tant que premier argument. S'il vous plaît utiliser les habitudes suivantes pour déclarer les méthodes de classe:

class C:
    @classmethod
    def f(cls, arg1, arg2, ...): ...

décorateur former cette fonction appelée @classmethod - Pour plus de détails, voir la définition de la fonction.
catégorie Comment France de ton utilisation ( C . f ( ) ) ( C ( ) . f ( ) ) \ Couleur {red} {class appelle la méthode peut être effectuée sur la classe (par exemple de Cf ()) peut être effectuée sur des instances (par exemple, C (). F ()). }
Des exemples de son extérieur sorte de leur classe seront ignorés. Si l'appel de méthode sur la classe dérivée appartient à la classe, l'objet de classe dérivée est passé comme premier argument est implicite.
C ++ Java Méthodes de classe etméthodes statiques ou différents. Si vous avez besoin ce dernier, voir staticmethod ().

2 méthode statique

@staticmethod
méthodes de transfert en tant que méthodes statiques.

\ Couleur méthode statique {rouge} ne reçoit pas un premier paramètre implicite. Pour déclarer une méthode statique, utilisez la syntaxe

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...

décorateur former cette fonction appelée @staticmethod - Pour plus de détails, voir la définition de la fonction.

( C . f ( ) ) ( C ( ) . f ( ) ) peut être fondée sur (par exemple, de Cf ()) peut être effectuée (par exemple, C (). F ()) \ Color appel de méthode statique {rouge} dans l'exemple.

Les méthodes statiques en Python et Java ou méthodes statiques C + sont similaires. Voir classmethod (), est utilisé pour créer des variantes constructeur de la classe alternative.

Comme tous les décorateurs comme, vous pouvez également appeler la même fonction que staticmethod classique, et effectuer une action sur ses résultats. Ces fonctions doivent faire référence à la classe du corps et, dans certains cas, vous voulez éviter la conversion automatique à la méthode exemple. Pour ces cas, utilisez la syntaxe suivante:

class C:
    builtin_open = staticmethod(open)

Pour plus d'informations sur les méthodes statiques, s'il vous plaît se référer à la hiérarchie de type standard.

3 différence

  • Différentes configurations: méthode de classe de classe nécessite que leur première CLS argument, la méthode statique ne reçoit pas un premier paramètre implicite, sa propre instance de l'exemple de la méthode comme premier argument de soi;
  • Des exemples de méthodes doivent appel après la création d'instances, alors que les deux autres peuvent être appelés dépendent directement de la classe, après la classe créent encore des méthodes d'instance et les méthodes statiques peuvent être utilisées;
  • constructeur de classe Java peut être surchargé, méthode de classe de python dans le cas de la définition d'une pluralité de constructeur analogique Java;
  • Méthode statique utilise Python et Java classes conçues et instances peuvent être invoquées après l'instance est créée, sans créer une nouvelle méthode statique, en utilisant la classe parente;
  • Méthode statique Scénario: Si vous ne lisez pas les méthodes d'instance et des propriétés dans la méthode, purement en passant un paramètre et retourne une méthode fonctionnelle des données, il convient pour les méthodes statiques sont définies, il économise l'objet instanciation les coûts, cette méthode est souvent à l'extérieur de la classe en fonction de la présence de couches de module est pas de problème, mais la catégorie, seul le type de service.
  • Méthode des scénarios d'utilisation de la classe: 1, en tant que méthode d'usine pour créer une instance d'objet, par exemple, ont méthode intégrée dans la classe de module de classe datetime.date largement utilisé comme une méthode de fabrication, afin de créer un objet date. 2, si vous voulez appeler une méthode statique à l'intérieur de la classe, la méthode définie comme une méthode de classe est appropriée, car si elle est définie comme méthodes statiques, vous devez faire référence explicitement la classe A, ce n'est pas une bonne chose pour l'héritage .
# coding:utf-8
class Foo(object):
    """类三种方法语法形式"""
    x,y = 10,14
    def instance_method(self):
        pass
    @staticmethod
    def static_method_averag(*mixes):
        return sum(mixes) / len(mixes)

    @classmethod
    def class_method(cls):
        return cls.static_method_averag(cls.x,cls.y)

foo = Foo()
# 调用关系
# foo.instance_method()
# foo.static_method_averag(1,2,3)
# foo.class_method()
# print('----------------')
# Foo.static_method_averag(1,2,3)
# Foo.class_method()
# print('----------------')

# 内存关系
print(Foo.static_method_averag is  foo.static_method_averag)  #静态方法不会动
print(Foo.class_method is  foo.class_method)
print(Foo.instance_method is  foo.instance_method)  #实例化后 实例绑定这个方法



Référence:
https://zhuanlan.zhihu.com/p/28010894
https://docs.python.org/zh-cn/3/index.html

Publié 105 articles originaux · a gagné les éloges 8 · vues 10000 +

Je suppose que tu aimes

Origine blog.csdn.net/x1131230123/article/details/104475923
conseillé
Classement