TypeError: аргумент super () 1 должен быть типом, а не str в Python3.7 - PullRequest
0 голосов
/ 17 февраля 2019

Когда я пытаюсь вызвать конструктор суперкласса в конструкторе thermo.py (файлы ниже), я получаю следующую ошибку:

Traceback (most recent call last):
File "/var/wheaterstation/scripts/wsControl.py", line 58, in <module>
controller = controller()
File "/var/wheaterstation/scripts/wsControl.py", line 21, in __init__
self.thermo = thermo("Thermometer", logger)
File "/var/wheaterstation/scripts/thermo.py", line 7, in __init__
super(name, logger).__init__()
TypeError: super() argument 1 must be type, not str

Я видел, что в 2.6 эта ошибка часто возникаетвверх, если суперкласс не будет расширять «объект».Я пробовал это, но это не похоже на работу.

wsPart.py:

class wsPart(object):
logger = None
name = ""
def __init__(self, name, logger):
    self.logger = logger
    self.name = name
    self.logger.writeLog(self, "created")

def getName(self):
    return self.name

thermo.py:

import os, sys
from wsPart import wsPart
class thermo:
functional = False 
file = '/sys/bus/w1/devices/28-00000833e8ff/w1_slave'
def __init__(self, name, logger):
    super(name, logger).__init__() ## this calls the wsPart constructor
    functional = True

def read(self):
    ##reads out the file mentioned in line 5 and returns it
    fileobject = open(self.file)
    filecontent = fileobject.read()
    fileobject.close()
    self.logger.writeLog(self,"Completed Meassurement")
    return filecontent

и часть wsControl.Пи, что имеет значение:

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")
    self.thermo = thermo("Thermometer", logger)
    self.dbConnector = dbConnector("DBConnector",logger)

полный код здесь

1 Ответ

0 голосов
/ 18 февраля 2019

Сначала я должен был сделать термо, чтобы быть подклассом wsPart:

class thermo:

изменилось на

class thermo(wsPart):

Затем пришлось изменить:

super(name, logger).__init__()

до:

super().__init__(name, logger)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...