Пример кода:
>>> class Snake:
pass
а потом я делаю это
>>> snake = Snake()
>>> print(snake)
<__main__.Snake object at 0x7f315c573550>
Как я могу проверить, что это возвращает?
if snake == "<__main__.Snake object at 0x7f315c573550>":
print("it worked")
оператор if не работает. как я могу проверить, чему равна змея в выражении if? Спасибо.
print
отображает строковое представление объекта, а не сам объект. На самом деле сам объект — это просто набор битов в памяти, так как же он должен выглядеть? В вашем случае вы можете получить одно и то же строковое представление и сравнить.
str(snake) == "<__main__.Snake object at 0x7f315c573550>":
print("it worked")
Поскольку число в конце меняется каждый раз, когда вы создаете объект Snake, вы можете использовать регулярное выражение для сопоставления его части, оставляя детали этого шестнадцатеричного числа на волю случая.
import re
if re.match(r"<__main__\.Snake object at 0x[\da-f]+>", str(snake)):
print("it worked")
Из документов:
По умолчанию
object
реализует __eq__() с помощьюis
Итак, if snake == snake
, но это тавтология.
Я думаю, что вы на самом деле хотите сделать, это проверить, является ли змея экземпляром Snake:
if isinstance(snake, Snake):