В коде, который вы опубликовали, есть ошибки отступа, сначала вы должны сделать отступ для методов и их содержимого, то есть методы находятся внутри класса. С другой стороны, self
относится к экземпляру, который вызывает определенный метод и дает доступ ко всем данным экземпляра. Например,
student1 = Student('name1', 20)
student2 = Student('name2', 21)
student1.some_method(arg1)
в последнем вызове, за кадром student1
передается для параметра self метода, что означает, что все данные student1 доступны через аргумент self
.
Вы пытаетесь использовать staticmethod
, который не имеет данных экземпляра и предназначен для логической группировки функций, связанных с классом, без явного экземпляра, который не требует self
в определении метода:
class Student:
...
@staticmethod
def get_biggest_number(*ages):
# do the task here
С другой стороны, если вы хотите отслеживать все экземпляры учеников и автоматически применять метод get_biggest_number для них, вам просто нужно определить переменную класса (а не переменную экземпляра) и в каждом экземпляре __init__
добавить новый экземпляр в этот список:
class Student:
instances = list() # class variable
def __init__(self, name, age):
# do the task
Student.instances.append(self) # in this case self is the newly created instance
и в методе get_biggest_number
вы просто просматриваете список Student.instances
, который будет содержать экземпляр Student, и вы можете получить доступ к переменной instance.age
instance:
@staticmethod
def get_biggest_number():
for student_instance in Student.instances:
student_instance.age # will give you age of the instance
Hope thisпомогает.