[Python 3]numpy.ndarray: la conversione in un "normale" classe
mi piace ndarray
ma trovo fastidioso da usare.
Ecco un problema che ho di fronte. Voglio scrivere class Array
che erediterà gran parte delle funzionalità di ndarray, ma ha solo un modo per essere istanziato: come un array pieno di zero di una certa dimensione. Speravo di scrivere:
class Array(numpy.ndarray):
def __init__(size):
# What do here?
mi piacerebbe chiamare super().__init__
con alcuni parametri per creare una matrice zero pieno, ma non funzionerà in quanto ndarray
utilizza una funzione globale numpy.zeros
(piuttosto che un costruttore) per creare un array pieno di zero.
Domande:
Perché ndarray utilizzare le funzioni globali (modulo) invece di costruttori, in molti casi? È un grosso fastidio se sto cercando di riutilizzarli in un ambiente orientato agli oggetti.
Qual è il modo migliore per definire
class Array
di cui ho bisogno? Devo compilare manualmente londarray
con zero o esiste un modo per riutilizzare la funzionezeros
?
Non vedo perché tu voglia creare la tua classe. Qual è il vantaggio rispetto alla funzione di fabbrica 'numpy.zeros()'? Se il nome non ti piace, basta rinominarlo, come 'create_array = numpy.zeros'. –
Non sono più sicuro che ci sia un vantaggio. Forse non sono abituato alle funzioni di fabbrica. Dovrò pensarci. – max
@Sven Marnach: ho trovato diversi link su questo tema generale: http://stackoverflow.com/questions/628950/constructors-vs-factory-methods http://stackoverflow.com/questions/2959871/factory -vs-instance-constructors http://stackoverflow.com/questions/4617311/creation-of-objects-constructors-or-static-factory-methods Niente di specifico per Python, ma i commenti generali di altre lingue sembrano applicare. E per quanto posso dire, non c'è davvero alcun svantaggio per le funzioni di fabbrica (a parte le mie preferenze personali). – max