[Python3.1.2] Impossible d'utiliser __init__ avec des paramètres

Résolu
titoulaka Messages postés 6 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 13 mai 2010 - 6 mai 2010 à 18:00
titoulaka Messages postés 6 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 13 mai 2010 - 7 mai 2010 à 22:39
bonjour,

j'ai créer une classe avec deux arguments sur le constructeur, lorsque j'essaie de l'utiliser j'ai comme message d'erreur :
>>> b = MyLog(12,25)
Traceback (most recent call last):
File "", line 1, in <module>
b = MyLog(12,25)
TypeError: 'module' object is not callable


avec un exemple du livre de G Swinnen cela fonctionne,
ou avec un exemple de mon cru
class Taz:
def __init__(self,un=None,deux=None):
print('dans le constructeur')

cela donne

>>> x = Taz('1',2)
dans le constructeur
>>>


Je ne vois pas la différence.

Pouvez vous m'indiquez mon erreur.

Merci

@+
le code :
import time
import os
class MyLog:
"Gestion des log"
def __init__(self,Pathfile=None,FileName=None):
# on creer un objet time
self.temps = time
if FileName == None:
# Le nom est vide on initialise avec le timestamp
self.FileLog = 'Kersave'+ str(int(self.temps.time())) + '.log'
# ou self.FileLog = 'Kersave'+ str(int(self.temps.strftime("%Y%m%d%H%M%S")) + '.log' 
else:
self.FileLog = FileName
if os.path.isdir(PathFile):
self.FileLog = PathFile + self.FileLog
else:
# Ail le chemin n'existe pas ou n'est pas bon, on fait quoi ? un log dans c:\temp
if not os.path.isdir('c:\temp'):
os.mkdirs('c:\temp')
PathFile = 'c:\temp\\'
self.FileLog = Pathfile + self.FileLog

def __del__(self):
#destructeur
sefl.close_file()

def open_file(self):
# creation du fichier de log
self.file = open(self.FileLog,'a')

def close_file(self):
# Fermeture du fichier de log
self.file.close()

def  add_log(self,text):
# Ajout d'information dans le log
# Formatage [date] texte self.temps.strftime("[%d/%m/%Y %H:%M:%S]"
self.file.write(self.temps.strftime("[%d/%m/%Y %H:%M:%S]") + ' ' + text + '\r\n')

def view_log(self):
# Affiche le log
self.close_file()
f = open(self.FileLog,'r')
txt = ''
while 1:
tmp = f.readline()
if tmp == '':
break
txt = txt + tmp
f.close()
print(txt)
# pkoi pas un return txt plus tard ?

def clear_file(self):
# destruction du fichier on le vide mais le garde ouvert (pour le cas ou ;))
self.close_file()
a = open(self.FileLog,'w')
a.close()
self.open_file()
# fin de la classe

2 réponses

titoulaka Messages postés 6 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 13 mai 2010 1
7 mai 2010 à 22:39
bon ben me manquais la notion de module.

Pour ceux que ça intéressent

en gros une classe ou une fonction
class bar:
blabla

dans un fichier fu sera utiliser de la façon suivante dans un autre fichier
import fu

instanceDeClasse = fu.bar()

c'est tout ..

Merci à ceux qui ont lu (ou pas)

@+
3
titoulaka Messages postés 6 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 13 mai 2010 1
7 mai 2010 à 13:03
après test si je fait
logage = MyLog('C:\Temp','Log de test')
logage.add_log('ligne de test 1')
logage.add_log('ligne de test 2')
logage.add_log('ligne de test 3')
logage.view_log()

en bas du fichier contenant le code du 1er message, cela fonctionne

si je creer un fichier simple
# -*- coding: utf-8 -*-
import os
import time
import shutil
import configparser
import MyLog

logage = MyLog('C:\Temp','Log de test')
logage.add_log('ligne de test 1')
logage.add_log('ligne de test 2')
logage.add_log('ligne de test 3')
logage.view_log()

=>
C:\Python31>python.exe hum.py
Traceback (most recent call last):
File "hum.py", line 12, in <module>
logage = MyLog('C:\Temp','Log de test')
TypeError: 'module' object is not callable/code

le x = MyLog fonctionne
help(x) donne
[quote]
C:\Python31>python.exe hum.py
Help on module MyLog:

NAME
MyLog

FILE
c:\python31\mylog.py

CLASSES
builtins.object
MyLog

class MyLog(builtins.object)
| Gestion des log
|
| Methods defined here:
|
| __del__(self)
|
| __init__(self, PathFile=None, FileName=None)
|
| add_log(self, text)
|
| clear_file(self)
|
| close_file(self)
|
| open_file(self)
|
| view_log(self)
|
| ---------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)


Je ne vois pas pourquoi le fait d'importer la classe d'un fichier ne me permet pas d'utiliser la classe comme il faut.

Où est mon erreur ?

Merci

@+
0
Rejoignez-nous