Metodi di namedtuple non elencati da dir ()

-2

In 8.3. collezioni - Tipi di dati del contenitore - Documentazione Python 3.6.4rc1 , specifica 5 metodi di namedtuple .

namedtuple_methods = {'_fields', '_make', '_replace', '_asdict', '_source'}

Tuttavia, i metodi non possono essere acquisiti con il metodo dir

from collections import namedtuple
set(dir(namedtuple)) & namedtuple_methods
In [64]: set(dir(namedtuple)) & namedtuple_methods
Out[64]: set()

Non condividono alcuna intersezione.

È interessante notare che un particolare namedtuple elenca i metodi

Book = namedtuple('Book', 'name, author')
In [70]: set(dir(Book)) & namedtuple_methods
Out[70]: {'_asdict', '_fields', '_make', '_replace', '_source'}

Qual è il meccanismo dietro?

    
posta JawSaw 14.12.2017 - 12:48
fonte

1 risposta

1

In Python, le classi sono oggetti. E namedtuple è una funzione che crea classi. Quindi devi distinguere tra:

  • la funzione namedtuple di fabbrica. Questa è una funzione che restituisce una classe, che è anche un oggetto.
  • una classe namedtuple, ad esempio Book = namedtuple('Book', ['name', 'author'])
  • un'istanza di una classe namedtuple, ad esempio Book('Brave New World', 'Aldous Huxley')

Tutti questi sono oggetti diversi. La funzione dir() tenta di trovare i campi (che possono essere metodi) a cui è possibile accedere su quell'oggetto. Quindi su un oggetto di classe ti darà i metodi e i campi in quella classe. Questi metodi possono essere metodi di classe o metodi di istanza, a seconda dei loro "descrittori". In particolare, dir(namedtuple) elencherà i campi di qualsiasi oggetto funzione.

    
risposta data 14.12.2017 - 13:32
fonte

Leggi altre domande sui tag