今だけ人気マンガ100円レンタル特集♪

プログラミングのpythonについてです。

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)

これを出力すると、

spam
============
Hello world!

となるみたいなのですが、なぜなのか教えてほしいです。

A 回答 (1件)

https://docs.python.org/ja/3/reference/datamodel …

__truediv__ メソッド は / 演算子に対応した特殊メソッドです。
__truediv__ メソッドが定義してあると、 / 演算子を使った「割り算」が 「__trudiv__ メソッドの実行」に置き換わります(オーバーロードされます)

spam = SpecialString("spam")
なので、 変数spam はクラスSpecialStringであり、
クラスSpecialString には __truediv__ メソッドが定義されています。
よって
print(spam / hello)

print(spam.__truediv__(hello))
と同じになります。


※ 正確には、同じではありません。
__trudiv__ __rtruediv__ の定義の有無、右項と左項のクラスの関係等によって変わります。
https://oshiete.goo.ne.jp/qa/11655315.html
(少し前に別の質問に答えたもの。このときは + と __add__ __radd__ですが)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング