Metoda specjalna __str__

0

Jak dotąd myślałem, że metoda str() zwraca łancuch, a okazuje się, że zwraca obiekt i takie coś nie przejdzie. Nie można zastosować konkatenacji:

# 04.08.2019 r.
# Demonstruje metodę __str__

class Player(object):
    """ Gracz. """

    def __init__(self, nick):
        self.nick = nick

    def __str__(self):
        rep = self.nick
        return rep

# main
player = Player("Tomek")

print("Witaj " + player)
        
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")

Czy ja czegoś nie wiem?

1

print("Witaj" + str(player))

Jawna konwersja na str

Nowsze Pythony:

print(f"Witaj {player}")

0
def __str__(self):
        rep = self.nick
        return rep

A nie mozna

def __str__(self):
        return self.nick
0

metoda str() zwraca łancuch, a okazuje się, że zwraca obiekt
Czy ja czegoś nie wiem?

Nie wiesz, że łańcuch jest obiektem.

0
jackweb napisał(a):

print("Witaj" + str(player))

Tak też zrobiłem, ale mnie to zadziwiło.

1

bez str łączysz stringa z Player. Wąż się nie domyśla, że można łączyć stringa z innym obiektem, bo mógłbyś przecież przeciążyć __add__:

Bonus dla Ciebie:

>>> class Player:
...  def __init__(self, name):
...   self.name = name
...  def __str__(self):
...   return self.name
...  def __add__(self, other):
...   return f"{self} {other}"
...  def __radd__(self, other):
...   return f"{other} {self}"
... 
>>> t = Player("Tomek")
>>> print("Hello" + t)
Hello Tomek
>>> print(t + "- hello")
Tomek - hello
>>> ```
0

Python to nie PHP i nie robi takich niejawnych konwersji. Nawet głupie "ala"+1 nie przejdzie i musisz explicite zrobic str(1).

1 użytkowników online, w tym zalogowanych: 0, gości: 1