Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 1, 2019 23:02:00

zhostkiy
Зарегистрирован: 2019-01-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Self и вызов функций

Здравствуйте!
Обучаюсь в данный момент, и возникли некоторые трудности.

Есть класс с функцией:

 class ClassOne():
    def DefOne(self):
        print("Hello!")

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

Так вот, что такое self? Не могу понять.

Отредактировано zhostkiy (Янв. 1, 2019 23:03:29)

Офлайн

#2 Янв. 1, 2019 23:21:07

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Self и вызов функций

Во первых, чтобы выполнить это условие

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

Офлайн

#3 Янв. 1, 2019 23:38:29

zhostkiy
Зарегистрирован: 2019-01-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Ага, то есть, без этого аргумента мы никак не получим данные метода внутри другого класса. Я все правильно понял?

Офлайн

#4 Янв. 1, 2019 23:42:39

zhostkiy
Зарегистрирован: 2019-01-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Self и вызов функций

+ очень странное поведение аргумента. Если не указывать обязательный аргумент self, но вместо него указать другой, то метод все равно будет вызываться. В чем подвох?

Офлайн

#5 Янв. 1, 2019 23:49:57

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Self и вызов функций

zhostkiy
Ага, то есть, без этого аргумента мы никак не получим данные метода внутри другого класса. Я все правильно понял?
Нет. Чтобы получить методы другого класса (в твоем случае ты хочешь выполнить метод DefOne() из класса ClassOne) необходимо унаследовать этот метод делается это так class ClassTwo(ClassOne)
аргумент self - это общепринятое название его можно назвать как угодно, но лучше так не делать.

Офлайн

#6 Янв. 2, 2019 00:04:37

zhostkiy
Зарегистрирован: 2019-01-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Self и вызов функций

Romissevd
понял теперь. А как насчет того, что если функция вызывается вне класса через DefOne(), на экране выводится сообщение, но если выводить то же самое сообщение, но уже внутри класса, будет ошибка. С чем это связано? Нужно обязательно внутри класса передавать методу какой-либо аргумент?

Офлайн

#7 Янв. 2, 2019 11:32:52

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Self и вызов функций

zhostkiy
если функция вызывается вне класса через DefOne(), на экране выводится сообщение
Давай-ка посмотрим как вызывается вне класса:
x.DefOne(), где x - это экземпляр класса, внутри которого находится DefOne, а x.DefOne означает “полный путь” к DefOne.
Для вызова DefOne внутри класса тоже требуется указать “полный путь” к функции. Поскольку мы вызываем её из самого класса (из самого себя), то здесь путь начинается со слова self и далее функция: self.DefOne()

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version