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 :
C'est simplement la façon dont les classes dans Python fonctionnent: lorsque vous dites o.method (1) code> Vous pouvez y penser comme un raccourci pour C.method (o, 1) code>. Un méthod_descriptor code> fait partie de la machine qui fait ce travail. P> p>
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.
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)
Il devrait y avoir un ... et de préférence un seul moyen envoûter de le faire. P> blockQuote>
philosophiquement parler, là est em> 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. P>
Votre mission de travail est de lire Guido's Pourquoi Le moi explicite doit rester . P>
Descripteur de méthode est une classe normale avec Quand, par exemple, Pour illustrer méthod_descriptor Machinery, permettez-moi de donner cet exemple: p> maintenant, lorsque vous appelez __ obtenir __ code>, __ ensemble __ code> et __ del __ code> méthodes. __ < / code> est appelé, il est passé 2 ou 3 arguments: p>
auto code>, qui est la classe descripteur elle-même, li>
inst code>, qui correspond à l'objet de l'appelant à laquelle la méthode "décrite" doit être liée, li>
CLS code>, qui peut être Aucun code>. li>
ul> test.Meth_2 (t, 1,2 , 3,4) code>, cela ne fonctionnera pas. P> p>
'a'.center(3) == str.center('a',3)
There is only one way to do it.
Comprendre
__ obtenir __ code> et__ ensemble __ code> et des descripteurs Python