Sto lavorando su qualche codice socket Python che utilizza la funzione socket.fromfd()
.Determinare se una funzione è disponibile in un modulo Python
Tuttavia, questo metodo non è disponibile su tutte le piattaforme, quindi sto scrivendo un codice di fallback nel caso in cui il metodo non sia definito.
Qual è il modo migliore per determinare se un metodo è definito in fase di esecuzione? Il seguente è sufficiente o esiste un linguaggio migliore?
if 'fromfd' in dir(socket):
sock = socket.fromfd(...)
else:
sock = socket.socket(...)
io sono un po 'preoccupato che la documentazione per dir()
sembra scoraggiare l'uso. Sarebbe getattr()
essere una scelta migliore, come in:
if getattr(socket, 'fromfd', None) is not None:
sock = socket.fromfd(...)
else:
sock = socket.socket(...)
Pensieri?
EDIT Come Paolo indicate, questa domanda è nearly a duplicate di una domanda sulla determinazione presenza attributo. Tuttavia, poiché la terminologia utilizzata è disgiunta (l'oggetto "lk " ha un attributo " vs mio " ha una funzione ") può essere utile conservare questa domanda per la ricerca a meno che i due non possano essere combinati.
Io non vedo come questa risposta merita un downvote ...:/ –
Preferirei hasattr sopra getattr solo per amor di leggibilità! – bobince
"hasattr non dovrebbe essere usato perché ingerisce le eccezioni incluso KeyboardInterrupt." (c) http://doc.bazaar.canonical.com/developers/code-style.html#hasattr-and-getattr, quindi 'getattr' è una buona roba da fare. –