¿Inconsistencia en la ayuda de python (‘cadena’) versus ayuda (lista)?

Cuando escribo help('string') en el intérprete de python, obtengo información sobre la clase de string. Allí, la parte upper() se indica como una función. Sin embargo, solo puedo llamarlo como un método como "hi".upper() lugar de upper("hi") .
Por lo tanto, se podría suponer que cualquier método se indicará como una función en las cadenas de documentación de los módulos integrados. Sin embargo, cuando hago help('list') , ¡los métodos de la clase de lista se indican como métodos en las cadenas de documentación!
¿Por qué esto es tan? ¿Solo porque la persona que escribió las doctrines era inconsistente o que otras personas lo escribieron? ¿O estos métodos (los llamados “funciones” frente a los llamados “métodos” en las cadenas de documentación) tienen propiedades diferentes?

Cuando buscó help('string') , buscaba las cadenas de documentación del módulo de string . Si help(str) o help('str') obtendrás las cadenas de documentación del tipo str , ¡y aquí aparece la parte upper como método!

Como puede ver aquí, la función upper del módulo de string es en realidad una función y no un método:

 >>> upper('hi') Traceback (most recent call last): File "", line 1, in  NameError: name 'upper' is not defined >>> 'hi'.upper() # method from the str type 'HI' >>> from string import upper >>> upper('hi') # function from the string module 'HI' 

Quieres hacer help('str') , no help('string') . str es un tipo, string es un módulo que proporciona funciones para trabajar con strings.

Está creando una instancia de ese objeto y luego llama a la ayuda en esa instancia.

Así que todo esto funciona:

 help(1) help({}) help([]) help('') help(dir) help(help) 

Ayuda toma la cadena de documentos para esa instancia y se la devuelve. Cuando crees tus propios objetos, puedes poner en cadenas de documentación útiles o lo que quieras.

No hay nada malo con lo que ves.

 >>> help('string') 

Le mostrará la documentación del módulo de string . Y parece que hay una función upper dentro:

 >>> import string >>> string.upper('hello') 'hello' 

Yo diría que esta parte upper es la misma que se llama si lo hace:

 >>> 'hello'.upper() 

Pero no estoy seguro.

Observe que una cadena '' es un tipo de str no un tipo de string . Esto significa que probablemente estés buscando:

 >>> help('str') 

Y aquí verás también el método str.upper .

Esto se debe a que 'string' es una string . Así es 'list'

Para obtener un resultado similar para las lists , intente help([])