Est-il un moyen de contourner le constructeur __init__
d'une classe en python?
Exemple:
class A(object):
def __init__(self):
print "FAILURE"
def Print(self):
print "YEHAA"
Maintenant, je voudrais créer une instance d' A
. Il pourrait ressembler à ceci, cependant, cette syntaxe n'est pas correcte.
a = A
a.Print()
Merci d'avance pour votre aide.
EDIT:
Un même exemple plus complexe:
Supposons que j'ai un objet C
, dont le but est de stocker un seul paramètre, et de faire quelques calculs avec elle. Le paramètre, cependant, n'est pas passé en tant que tel, mais il est intégré dans un énorme fichier de paramètres. Il pourrait ressembler à quelque chose comme ceci:
class C(object):
def __init__(self, ParameterFile):
self._Parameter = self._ExtractParamterFile(ParameterFile)
def _ExtractParamterFile(self, ParameterFile):
#does some complex magic to extract the right parameter
return the_extracted_parameter
Je voudrais maintenant vider et charger une instance de cet objet C
. Cependant, lorsque je charge cet objet, je n'ai que la seule variable self._Parameter
et je ne peux pas appeler le constructeur, car il attend le fichier de paramètres.
@staticmethod
def Load(file):
f = open(file, "rb")
oldObject = pickle.load(f)
f.close()
#somehow create newObject without calling __init__
newObject._Parameter = oldObject._Parameter
return newObject
En d'autres termes, il n'est pas possible de créer une instance sans passer par le fichier de paramètres. Dans mon "réel" en cas, cependant, il n'est pas un fichier de paramètres, mais une énorme indésirable de données que j'ai certainement pas envie de transporter dans la mémoire ou même de les stocker sur un disque.
Et depuis que j'ai envie de retourner une instance de C
à partir de la méthode de Load
- je faire en quelque sorte avoir à appeler le constructeur.
ANCIEN EDIT:
Un exemple plus complexe, ce qui explique pourquoi je me suis poser la question:
class B(object):
def __init__(self, name, data):
self._Name = name
#do something with data, but do NOT save data in a variable
@staticmethod
def Load(self, file, newName):
f = open(file, "rb")
s = pickle.load(f)
f.close()
newS = B(???)
newS._Name = newName
return newS
Comme vous pouvez le voir, depuis data
n'est pas stockée dans une variable de classe, je ne peut pas passer à d' __init__
. Bien sûr, je pourrais simplement les stocker, mais que faire si les données sont un énorme objet, que je n'ai pas envie de transporter en mémoire tout le temps ou même l'enregistrer sur le disque?