Найти - Пользователи
Полная версия: Self и вызов функций
Начало » Python для новичков » Self и вызов функций
1
zhostkiy
Здравствуйте!
Обучаюсь в данный момент, и возникли некоторые трудности.

Есть класс с функцией:
 class ClassOne():
    def DefOne(self):
        print("Hello!")

Есть также другой класс с функцией, который вызывает другую функцию из другого класса:
 class ClassTwo()
    def DefTwo(self):
        self.DefOne()

Так вот, что такое self? Не могу понять.
Romissevd
Во первых, чтобы выполнить это условие
zhostkiy
Есть также другой класс с функцией, который вызывает другую функцию из другого класса
необходимо произвести наследование того класса, который метод (так в классе называют функции) которого собираешься вызывать.
self - это ответ с картинками
 class ClassOne:
    def DefOne(self):
        print("Hello!")
class ClassTwo(ClassOne):
    def DefTwo(self):
        self.DefOne()
x = ClassTwo()
x.DefTwo()
y = ClassTwo()
x.DefOne()
В данном примере self - это х и y
zhostkiy
Romissevd
Во первых, чтобы выполнить это условие
zhostkiy
Есть также другой класс с функцией, который вызывает другую функцию из другого класса
необходимо произвести наследование того класса, который метод (так в классе называют функции) которого собираешься вызывать.
self - это ответ с картинками
class ClassOne:
def DefOne(self):
print(“Hello!”)
class ClassTwo(ClassOne):
def DefTwo(self):
self.DefOne()
x = ClassTwo()
x.DefTwo()
y = ClassTwo()
x.DefOne()
В данном примере self - это х и y

Ага, то есть, без этого аргумента мы никак не получим данные метода внутри другого класса. Я все правильно понял?
zhostkiy
+ очень странное поведение аргумента. Если не указывать обязательный аргумент self, но вместо него указать другой, то метод все равно будет вызываться. В чем подвох?
Romissevd
zhostkiy
Ага, то есть, без этого аргумента мы никак не получим данные метода внутри другого класса. Я все правильно понял?
Нет. Чтобы получить методы другого класса (в твоем случае ты хочешь выполнить метод DefOne() из класса ClassOne) необходимо унаследовать этот метод делается это так class ClassTwo(ClassOne)
аргумент self - это общепринятое название его можно назвать как угодно, но лучше так не делать.
zhostkiy
Romissevd
понял теперь. А как насчет того, что если функция вызывается вне класса через DefOne(), на экране выводится сообщение, но если выводить то же самое сообщение, но уже внутри класса, будет ошибка. С чем это связано? Нужно обязательно внутри класса передавать методу какой-либо аргумент?
Rafik
zhostkiy
если функция вызывается вне класса через DefOne(), на экране выводится сообщение
Давай-ка посмотрим как вызывается вне класса:
x.DefOne(), где x - это экземпляр класса, внутри которого находится DefOne, а x.DefOne означает “полный путь” к DefOne.
Для вызова DefOne внутри класса тоже требуется указать “полный путь” к функции. Поскольку мы вызываем её из самого класса (из самого себя), то здесь путь начинается со слова self и далее функция: self.DefOne()

zhostkiy
если выводить то же самое сообщение, но уже внутри класса, будет ошибка. С чем это связано? Нужно обязательно внутри класса передавать методу какой-либо аргумент?
Не понятен вопрос. Хотелось бы видеть после какой команды внутри класса появляется ошибка. Про какие аргументы идёт речь? Приведите пример, когда в приведенных выше фрагментах требуются аргументы.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB