Metoda specjalna __str__

Metoda specjalna __str__
PJ
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:24
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:

Kopiuj
# 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?

JA
  • Rejestracja:prawie 15 lat
  • Ostatnio:około miesiąc
1

print("Witaj" + str(player))

Jawna konwersja na str

Nowsze Pythony:

print(f"Witaj {player}")

stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 godziny
0
Kopiuj
def __str__(self):
        rep = self.nick
        return rep

A nie mozna

Kopiuj
def __str__(self):
        return self.nick

λλλ
PJ
No oczywiście, ze można.
stivens
Pytanie retoryczne :p
PJ
Tak najpierw chciałem napisać, ale napisałem ładniej do czytania:) Taki nawyk;)
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
0

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

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

PJ
To dlaczego nie można go konkatenować?
stivens
Nie konkatenujesz dwoch stringow tylko string + obiekt typu Player. Musialbys przeciazyc operator [+]
PJ
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:24
0
jackweb napisał(a):

print("Witaj" + str(player))

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

JA
  • Rejestracja:prawie 15 lat
  • Ostatnio:około miesiąc
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:

Kopiuj
>>> 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
>>> ```
PJ
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.