Je continue à recevoir l'erreur: TypeError: unbound method get_num_students() must be called with Student instance as first argument (got nothing instead)
Voici le code:
class Student(object):
num_students = 0
num_grad_2013 = 0
def __init__(self, first_name, last_name, id_num, yr_of_grad, counselor):
self = self
self.first_name = first_name
self.last_name = last_name
self.id_num = int(id_num)
self.yr_of_grad = int(yr_of_grad)
self.counselor = counselor
def to_string(first_name, last_name, id_num, yr_of_grad, counselor):
print first_name
print last_name
print id_num
print yr_of_grad
print counselor
def move():
num_students -= 1
if yr_of_grad == 12:
num_grad_2013 -= 1
else:
None
print "Student with ID number: %s has moved." % (id_num)
def grad_early():
num_students -= 1
num_grad_2013 -= 1
print "Student with ID number: %s is graduating early." % (id_num)
def get_num_students():
print "There are %s students in this school." % (num_students)
def get_grad_2013():
print "There are %s students graduating this year." % (num_grad_2013)
def main():
print "Creating student Nathan Lindquist"
nathan = Student("Nathan", "Lindquist", 11111, 2014, "Iverson")
print nathan
print "Creating student Dylan Schlact"
dylan = Student("Dylan", "Schlact", 22222, 2012, "Greene")
print dylan
print "Creating student Matt Gizzo"
matt = Student("Matt", "Gizzo", 33333, 2013, "Connor")
print matt
# so number of students is 3, one is graduating in 2013
Student.get_num_students()
Student.get_grad_2013()
# change some things!
nathan.grad_early()
print nathan
matt.move()
#matt.grad_early()
#print matt
# so number of students is 2, one is graduating in 2013
Student.get_num_students()
Student.get_grad_2013()
return
Voici la sortie Python:
>>> main()
Creating student Nathan Lindquist
<__main__.Student object at 0x03065430>
Creating student Dylan Schlact
<__main__.Student object at 0x030653B0>
Creating student Matt Gizzo
<__main__.Student object at 0x030653D0>
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
main()
File "C:\Users\admin\Desktop\Python\student.py", line 51, in main
Student.get_num_students()
TypeError: unbound method get_num_students() must be called with Student instance as first argument (got nothing instead)
De plus, si quelqu'un pouvait m'aider à imprimer l'étudiant comme un espace en mémoire, je l'apprécierais également.
Il semble que vous vouliez définir grad_early
, get_num_students
et get_grad_2013
en tant que méthodes de classe, mais vous les avez déclarés en tant que méthodes d'instance.
Une méthode d'instance est une méthode qui appartient à une instance de la classe.
Un exemple serait
class Student(object):
# ...
def print_name(self): # This is an instance method
print "executing instance method"
@classmethod
def num_of_students(cls)
print "executing class method"
La différence est qu'une méthode d'instance fonctionnera sur s = étudiant () s.print_name ()
Et une méthode de classe fonctionnera sur la classe elle-même Étudiant.
Différences entre les versions In python 2 et 3:
Si vous avez déjà une méthode par défaut dans une classe portant le même nom et que vous déclarez de nouveau sous le même nom, elle apparaîtra comme un appel à une méthode non liée de cette instance de classe lorsque vous voudriez l'instancier.
Si vous vouliez des méthodes de classe, mais que vous les déclariez comme méthodes d'instance.
Une méthode d'instance est une méthode utilisée pour créer une instance de la classe.
Un exemple serait
def user_group(self): #This is an instance method
return "instance method returning group"
Méthode d'étiquette de classe:
@classmethod
def user_group(groups): #This is an class-label method
return "class method returning group"
Dans python 2 et 3, la classe @classmethod diffère pour écrire En python 3, elle est automatiquement désignée comme méthode de classe et n'a pas besoin d'écrire @classmethod Je pense que cela pourrait vous aider.