8
votes

Méthodes d'instance statiques VS de Str en Python

Alors, j'ai appris que les chaînes ont une méthode centrale.

>>> type(str.center)
<type 'method_descriptor'>
>>> type('Ni!'.center)
<type 'builtin_function_or_method'>


5 Réponses :


19
votes

C'est simplement la façon dont les classes dans Python fonctionnent: xxx

lorsque vous dites o.method (1) Vous pouvez y penser comme un raccourci pour C.method (o, 1) . Un méthod_descriptor fait partie de la machine qui fait ce travail.


1 commentaires

Plus précisément, lorsque vous accédez à O.Method, vous obtenez une fonction d'emballage liée directement à O. C'est l'une des propriétés les plus utiles de Python.



5
votes

Pour développer la réponse de Richiehindle:

en Python, toutes les méthodes d'une classe prennent un paramètre "auto". Par exemple: P>

str.center("hi", 5)


0 commentaires

9
votes

Il devrait y avoir un ... et de préférence un seul moyen envoûter de le faire.

philosophiquement parler, là est un seul moyen évident de le faire: 'A'.Center (3). Le fait qu'il existe une façon inouveuse d'appeler n'importe quelle méthode (c.-à-d. Les commentateurs bien expliqués par des précédents O.Method (X) et Type.Method (O, X)), ce qui est utile dans de nombreux contextes est parfaitement en ligne avec le zen de Python.

Votre mission de travail est de lire Guido's Pourquoi Le moi explicite doit rester .


0 commentaires

1
votes

Descripteur de méthode est une classe normale avec __ obtenir __ , __ ensemble __ et __ del __ méthodes.

Quand, par exemple, __ < / code> est appelé, il est passé 2 ou 3 arguments:

  • auto , qui est la classe descripteur elle-même,
  • inst , qui correspond à l'objet de l'appelant à laquelle la méthode "décrite" doit être liée,
  • CLS , qui peut être Aucun .

    Pour illustrer méthod_descriptor Machinery, permettez-moi de donner cet exemple: xxx

    maintenant, lorsque vous appelez test.Meth_2 (t, 1,2 , 3,4) , cela ne fonctionnera pas.


0 commentaires

2
votes
'a'.center(3) == str.center('a',3)
There is only one way to do it.

0 commentaires