Добавить в корзинуПозвонить
Найти в Дзене
Удалёнка

Python. Класс object. Строковое представление объекта

Начиная с 3-й версии в языке программирования Python все классы неявно имеют один общий суперкласс - object и все классы по умолчанию наследуют его методы. Одним из наиболее используемых методов класса object является метод __str__(). Когда необходимо получить строковое представление объекта или вывести объект в виде строки, то Python как раз вызывает этот метод. И при определении класса хорошей практикой считается переопределение этого метода. К примеру, возьмем класс Person и выведем его строковое представление: class Person: def __init__(self, name, age): self.name = name  # устанавливаем имя self.age = age  # устанавливаем возраст def display_info(self): print(f"Name: {self.name}  Age: {self.age}") tom = Person("Tom", 23) print(tom) При запуске программа выведет что-то наподобие следующего: <__main__.Person object at 0x10a63dc00> Это не очень информативная информация об объекте. Мы, конечно, можем выйти из положения, определив в классе Person дополнительный метод, который выводит д

Начиная с 3-й версии в языке программирования Python все классы неявно имеют один общий суперкласс - object и все классы по умолчанию наследуют его методы.

Одним из наиболее используемых методов класса object является метод __str__(). Когда необходимо получить строковое представление объекта или вывести объект в виде строки, то Python как раз вызывает этот метод. И при определении класса хорошей практикой считается переопределение этого метода.

К примеру, возьмем класс Person и выведем его строковое представление:

class Person:

def __init__(self, name, age):

self.name = name  # устанавливаем имя

self.age = age  # устанавливаем возраст

def display_info(self):

print(f"Name: {self.name}  Age: {self.age}")

tom = Person("Tom", 23)

print(tom)

При запуске программа выведет что-то наподобие следующего:

<__main__.Person object at 0x10a63dc00>

Это не очень информативная информация об объекте. Мы, конечно, можем выйти из положения, определив в классе Person дополнительный метод, который выводит данные объекта - в примере выше это метод display_info.

Но есть и другой выход - определим в классе Person метод __str__() (по два подчеркивания с каждой стороны):

class Person:

def __init__(self, name, age):

self.name = name  # устанавливаем имя

self.age = age  # устанавливаем возраст

def display_info(self):

print(self)

# print(self.__str__())     # или так

def __str__(self):

return f"Name: {self.name}  Age: {self.age}"

tom = Person("Tom", 23)

print(tom)      # Name: Tom  Age: 23

tom.display_info()  # Name: Tom  Age: 23

Метод __str__ должен возвращать строку. И в данном случае мы возвращаем базовую информацию о человеке. Если нам потребуется использовать эту информацию в других методах класса, то мы можем использовать выражение self.__str__()

И теперь консольный вывод будет другим:

Name: Tom Age: 23
Name: Tom Age: 23