Wenn ein Funktionsobjekt (was die def
Anweisung erstellt) ein Attribut einer Klasse und nachgeschlagen auf der Klasse oder eine Instanz der Klasse (das obj.attrname
Schema verwendet wird), wird es in ein method
gedreht Objekt. Dieses method
Objekt ist selbst abrufbar. Wenn das Nachschlagen auf einer Instanz geschieht, wird diese Instanz "magisch" als erstes Argument in die Funktion eingefügt. Wenn nicht, müssen Sie es selbst bereitstellen (genau wie bei jedem anderen Argument).
Sie können mehr über diese lesen (und wie die „Magie“ geschieht hier: https://wiki.python.org/moin/FromFunctionToMethod
In Ihrem Fall Nachschlag Sie die Funktion auf der Klasse, so dass es zwei Argumente erwartet (self
und param
), aber Sie nur passieren param
, daher der Fehler.
Sie haben variable_A
und variable_B
als Klassenattribute definiert (Attribute, die von allen Instanzen der Klasse gemeinsam genutzt werden). Wenn das wirklich die Absicht ist, und Sie wollen eine Methode, die Sie auf die Klasse selbst aufrufen können und die auf Klassenattribute zugreifen können, können Sie functionA
eine machen (es funktioniert das gleiche wie eine "Instanz" -Methode, außer es ist die Klasse, die als erstes Argument eingefügt) wird ‚magisch‘:
class A(object):
variable_A = 1
variable_B = 2
@classmethod
def functionA(cls, param):
return param + cls.variable_A
Dann können Sie functionA
rufen entweder direkt auf die Klasse selbst:
print(A.functionA(42))
oder auf einer Instanz, wenn Sie bereits eine zur Hand haben:
a = A()
# ...
print(a.functionA(42))
Nun, wenn Sie wirklich variable_A
und variable_B
wollten Attribut pro Instanz sein (jede Instanz A
hat es ganz eigene Variablen), müssen Sie diese Attribute auf der Instanz selbst in der initialier Methode und 2/Aufruf zu 1/erstellen functionA
auf einigen A
Instanz, dh:
class A(object):
def __init__(self, variable_A=1, variable_B=2):
self.variable_A = variableA
self.variable_B = variableB
def functionA(self, param):
return param + self.variable_A
a1 = A() # using default values
print(a1.functionA(42))
a2 = A(5) # custom value for variable_A
print(a2.functionA(42))
'A' ist eine Klasse. Sie benötigen 'A()' (Instanz von 'A'). – vaultah