Пытаясь понять эту строку в коде - PullRequest
0 голосов
/ 30 мая 2018

Я немного новичок в Python, и только что попал в Object Oriented.Я думаю, что понимаю основы, но эта строка кода действительно запутала меня.

Вот весь фрагмент:

class SpecialString:
    def __init__(self, cont):
        self.cont = cont

    def __truediv__(self, other):
        line = "=" * len(other.cont)
        return "\n".join([self.cont, line, other.cont])

spam = SpecialString("spam")
hello = SpecialString("Hello world!")
print(spam / hello)

Я говорю об этом:

line = "=" * len(other.cont)

Я не понимаю, что означает «other.cont».Как объект может быть атрибутом другого объекта?Или «продолжение» просто применяется к «другому»?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Метод ожидает два экземпляра объекта в качестве параметров, self и other.Код не заботится как таковой, к какому классу other принадлежит, если он также имеет атрибут cont, который имеет длину.Но метод деления обычно принимает два объекта одного типа.

(Когда объект другого типа ведет себя так же, как ваш, это называется полиморфизм. Это не важно пониматьна данный момент, но вы, вероятно, сталкивались с концепцией.)

0 голосов
/ 30 мая 2018

Специальный метод truediv () используется только с оператором /.

Ниже описано, как я могу разбить truediv .В основном это называется перегрузкой операторов.

def __truediv__(self, SpecialString("Hello world!")):
    #line = "=" * len(other.cont)
    line = "=" * len(SpecialString("Hello world!").cont)

    #return "\n".join([self.cont, line, other.cont])
    return "\n".join([SpecialString("spam").cont, line, SpecialString("Hello world!").cont])

Другое здесь - это передаваемый экземпляр 2-го класса.

В SO есть вопрос, который отвечает на перегрузку операторов truediv () подробно.Вы можете проверить это здесь: перегрузка оператора для __truediv__ в python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...