Я пытаюсь вызвать метод другого класса и дать вызываемому классу ссылку на текущий класс вместе с некоторыми другими параметрами.Но каким-то образом он принимает себя, заданный в качестве параметра, как себя вызываемого класса.
Позвольте мне показать вам:
import os, sys
from wsPart import wsPart
class thermo(wsPart):
functional = False ## see line 8
file = '/sys/bus/w1/devices/28-00000833e8ff/w1_slave'
def __init__(self, name, logger):
super().__init__(name, logger)
functional = True
def read(self):
fileobject = open(self.file)
filecontent = fileobject.read()
fileobject.close()
self.logger.writeLog(self,"Completed Meassurement") ##Problem on this line
return filecontent
Поэтому я называю класс logger
и метод writeLog
на это.Предоставление сообщения Parameters и ссылки на класс therm (self).
import datetime
from wsPart import wsPart
class logger():
logfile = "/var/log/wheaterstation.log"
name = "Logger"
def writeLog(self, sender, message):
conn = open(self.logfile, "w")
now = str(datetime.datetime.now().isoformat())
conn.write("[" + now + "]" + " (" + sender.getName() + "): " + message + "\n") ##Problem on this line
conn.close()
Как вы можете видеть, я поставил параметры self
, поскольку метод, принадлежащий классу, должен sender
быть ссылкой на класс термо, который был передан как сам в классе термо.Наконец, есть также message
, который был также передан в классе термо.Но это просто дает мне ошибку:
Traceback (most recent call last):
File "scrLib/wsControl.py", line 61, in <module>
controller = controller()
File "scrLib/wsControl.py", line 22, in __init__
self.thermo = thermo("Thermometer", logger)
File "/home/joco/git/wheaterstation/scrLib/thermo.py", line 10, in __init__
super().__init__(name, logger)
File "/home/joco/git/wheaterstation/scrLib/wsPart.py", line 8, in __init__
self.logger.writeLog(self, "created")
TypeError: writeLog() missing 1 required positional argument: 'message'
Таким образом, кажется, что параметр self
, который был передан в термо классе, интерпретируется как self
класса logger
, который получает все этоперепутал.
Можете ли вы, ребята, помочь мне здесь?
Спасибо всем заранее
Полный код + дополнительные комментарии можно посмотреть Здесь
Редактировать: И логгер и термо класс инициализируются в файле wsPart.py
:
class controller():
name = ""
logger = None
thermo = None
dbConnector = None
def __init__(self):
##THis created the controller and all the other objects
self.name = "Controller"
##Create Objects
self.logger = logger()
self.logger.writeLog(self,"logger created") ##This line Works
self.thermo = thermo("Thermometer", logger)
self.dbConnector = dbConnector("DBConnector",logger)