Ich habe diese Klasse:Python: Wie man eine Methode richtig aufruft?
class Tumor(object):
"""
Wrapper for the tumor data points.
Attributes:
idNum = ID number for the tumor (is unique) (int)
malignant = label for this tumor (either 'M' for malignant
or 'B' for benign) (string)
featureNames = names of all features used in this Tumor
instance (list of strings)
featureVals = values of all features used in this Tumor
instance, same order as featureNames (list of floats)
"""
def __init__(self, idNum, malignant, featureNames, featureVals):
self.idNum = idNum
self.label = malignant
self.featureNames = featureNames
self.featureVals = featureVals
def distance(self, other):
dist = 0.0
for i in range(len(self.featureVals)):
dist += abs(self.featureVals[i] - other.featureVals[i])**2
return dist**0.5
def getLabel(self):
return self.label
def getFeatures(self):
return self.featureVals
def getFeatureNames(self):
return self.featureNames
def __str__(self):
return str(self.idNum) + ', ' + str(self.label) + ', ' \
+ str(self.featureVals)
und ich versuche, eine Instanz davon in einer anderen Funktion in meinem Code später zu verwenden:
def train_model(train_set):
"""
Trains a logistic regression model with the given dataset
train_set (list): list of data points of type Tumor
Returns a model of type sklearn.linear_model.LogisticRegression
fit to the training data
"""
tumor = Tumor()
features = tumor.getFeatures()
labels = tumor.getLabel()
log_reg = sklearn.linear_model.LogisticRegression(train_set)
model = log_reg.fit(features, labels)
return model
Aber ich erhalte immer diese Fehlermeldung, wenn ich meine testen Code:
TypeError: __init__() takes exactly 5 arguments (1 given)
ich verstehe, dass ich nicht die fünf Argumente verwenden, wenn ich die Instanz von Tumor in train_model schaffen, aber wie kann ich das tun?
aber ... Sie rufen Funktionen mit Argumenten an anderer Stelle in Ihrem Code, ohne zu fragen, wie ...? Mach dasselbe mit dem. 'Tumor = Tumor (1,2,3,4)' [Bearbeiten: ohh, es ist nicht klar, dass es der Aufruf an den Klassennamen ist, der die __init__ Methode auslöst! OK, ich verstehe.] – TessellatingHeckler
Nun, haben Sie eine ID-Nummer, ein Label, Feature-Namen und Feature-Werte, um es zu übergeben? – user2357112
Ihre Frage ist nicht wirklich klar. Die init-Methode erfordert einige Werte und Sie sind der einzige, der weiß, wo Sie sie finden können (da es Ihr Skript ist). – lesingerouge