Б41 Чистый Python. Тонкости программирования для профи. Спб.: Питер



Download 6,94 Mb.
Pdf ko'rish
bet36/80
Sana24.02.2022
Hajmi6,94 Mb.
#212875
1   ...   32   33   34   35   36   37   38   39   ...   80
Bog'liq
978544610803 Chisty Python Tonko

'красный автомобиль'
>>> my_car 
<__console__.Car object at 0x109ca24e0>
Инспектирование объекта 
Car
в консоли по-прежнему дает предыдущий 
результат, содержащий идентификатор объекта. Однако распечатка объ-
екта показала строку, возвращенную добавленным нами методом 
__str__
.
Метод 
__str__
является одним из дандер-методов Python (с двойным 
подчеркиванием), и он вызывается, когда вы пытаетесь преобразовать 
объект в строковое значение посредством различных доступных способов:
>>> print(my_car) 
красный автомобиль
>>> str(my_car) 
'красный автомобиль' 
>>> '{}'.format(my_car) 
'красный автомобиль'
При надлежащей реализации 
__str__
вам не придется переживать по 
поводу печати атрибутов объектов непосредственно или написания от-
дельной функции 
to_string()
. Это питоновский способ управлять пре-
образованием строк.
Между прочим, некоторые разработчики предпочитают называть дан-
дер-методы Python «магическими». Но эти методы никоим образом 


4 .2 . Преобразование строк (каждому классу по __repr__) 107
магическими не являются. То, что имена этих методов начинаются и окан-
чиваются символами двойного подчеркивания, является всего-навсего 
согласованным правилом именования, которое выделяет их как ключевые 
функциональные средства языка Python. Он также помогает избежать 
конфликтов из-за совпадения имен с вашими собственными методами 
и атрибутами. Конструктор объектов 
__init__
соблюдает то же самое 
правило, и в этом нет ничего волшебного или загадочного.
Не бойтесь использовать дандер-методы Python — они призваны вам 
помогать.
Метод __str__ против __repr__
Нужно сказать, что наша история преобразования строк на этом не за-
канчивается. Вы заметили, что осмотр объекта 
my_car
в сеансе интер-
претатора по-прежнему дает этот странный результат 
object
at
0x109ca24e0>
?
Это произошло, потому что фактически имеется два дандер-метода, кото-
рые управляют тем, как объекты преобразовываются в строковые значе-
ния в Python 3. Первый, 
__str__
, и вы только что с ним познакомились. 
Второй, 
__repr__
, и характер его работы аналогичен методу 
__str__
, но 
он используется в других ситуациях. (В Python 2.x также имеется метод 
__unicode__
, которого я коснусь чуть позже.)
Ниже приведен простой эксперимент для «обкатки» ситуации, когда 
используется метод 
__str__
или 
__repr__
. Давайте переопределим наш 
автомобильный класс таким образом, чтобы он содержал оба дандер-ме-
тода для преобразования в строковое значение с результатами, которые 
легко различить:
class Car:
def __init__(self, color, mileage):
self.color = color
self.mileage = mileage
def __repr__(self):
return '__repr__ для объекта Car'
def __str__(self):
return '__str__ для объекта Car'


108 Глава 4 • Классы и ООП
Теперь, когда вы поэкспериментируете с приведенными выше примерами, 
вы поймете, какой метод управляет результатом преобразования строк 
в каждом случае:
>>> my_car = Car('красный', 37281) 
>>> print(my_car) 
__str__ для объекта Car 
>>> '{}'.format(my_car) 
'__str__ для объекта Car' 
>>> my_car 
__repr__ для объекта Car
Этот эксперимент подтверждает, что в результате инспектирования объ-
екта в сеансе интерпретатора Python просто печатается результат выпол-
нения метода 
__repr__
объекта.
Интересно отметить, что в контейнерах, таких как списки и словари, 
для представления содержащихся в них объектов всегда используется 
результат метода 
__repr__
, даже если вызвать функцию 
str
с самим кон-
тейнером:
str([my_car]) 

Download 6,94 Mb.

Do'stlaringiz bilan baham:
1   ...   32   33   34   35   36   37   38   39   ...   80




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish