Единственное, чего вам не хватает, так это того, что вы не создаете экземпляр для своего класса.
Попробуйте это-
class A:
@classmethod
def first(cls):
print('cls method')
cls.second(cls)
def second(self):
print('inst method 1')
self.third(self)
def third(self):
print('inst method 2')
instance = A()
instance.first()
Это должно дать вам желаемый результат. Что касается того, почему последнему методу требуется self в качестве параметра, self относится к экземпляру, к которому вы применяете метод, и, таким образом, вы можете изменить его свойства с ним. Позвольте мне привести вам пример -
class Kid():
def __init__(self, name, age):
self.name = name
self.age = age
def change_age(self, age):
self.age = age
tom = Kid('Tom', 13)
print(tom.age) #prints 13
tom.change_age(14)
print(tom.age) #prints 14
Здесь, с аргументом self
в методе, Python будет знать, какое свойство экземпляров age
должно его изменить.
В вашем случае это может показаться бессмысленным. Надеюсь, это поможет. :)