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

Поділитись

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Person:
def __init__(self, name, age):
self.__name = name

  # устанавливаем имя
self.__age = age 
# устанавливаем возраст 
@property
def name(self):
return self.__name

 @property
def age(self):
return self.__age

@age.setter
def age(self, age):
if age in range(1, 100):
self.__age = ageelse:
print("Недопустимый возраст") 
def display_info(self):
print("Имя:", self.__name, "\tВозраст:", self.__age) 
tom = Person("Tom", 23)
print(tom)

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

<__main__.Person object at 0x0000017D2BEBDCF8>

Это не очень информативная информация об объекте. Теперь определим в классе Person метод __str__:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Person:
def __init__(self, name, age):
self.__name = name  # устанавливаем имя
self.__age = age  # устанавливаем возраст

 @property
def name(self):
return self.__name

 @property
def age(self):
return self.__age

 @age.setter
def age(self, age):
if age in range(1, 100):
self.__age = ageelse:

print("Недопустимый возраст") 
def display_info(self):
print(self.__str__())

 def __str__(self):
return "Имя: {} \t Возраст: {}".format(self.__name, self.__age)

 tom = Person("Tom", 23)
print(tom)

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

Имя: Tom 	 Возраст: 23

Поділитись