Быстрый в изучении - мощный в программировании
Скрипт ИНВЕСТОР на Python

Попробуйте себя в качестве инвестора имея в помощники мощный алгоритм советника на Python...

Все уроки по PyQt5

PyQt5 реализован как комплект Python-модулей. Он включает в себя около 620 классов и 6000 функций и методов...

Скрипт отправки SMS через Python

Была задача отправить SMS-ки большому списку номеров телефона с уточнением цены за всю рассылку "До" ее отправки...

Доступ к атрибутам класса в языке Python

Доступ к атрибутам класса в языке Python

Атрибуты созданного экземпляра класса можно добавлять, изменять или удалять в любое время, используя для доступа к ним точечную запись. Если построить инструкцию, в которой присвоить значение атрибуту, то можно изменить значение, содержащееся внутри существующего атрибута, либо создать новый с указанным именем и содержащий присвоенное значение:

имя-экземпляра.имя-атрибута = значение
del имя-экземпляра.имя-атрибута

Альтернативным способом добавления, изменения либо удаления переменной экземпляра является использование встроенных функций Python:

getattr(имя-экземпляра, 'имя-атрибута') - возвращает значение атрибута экземпляра класса;
hasattr(имя-экземпляра, 'имя-атрибута') - возвращает True, если значение атрибута существует в экземпляре, в противном случае возвращает False;
setattr(имя-экземпляра, 'имя-атрибута', значение) - модифицирует существующее значение атрибута либо создает новый атрибут для экземпляра;
delattr(имя-экземпляра, 'имя-атрибута') - удаляет атрибут из экземпляра.

Имена атрибутов, автоматически предоставляемые интерпретатором Python, всегда содержат символ подчеркивания, чтобы обозначить «частный» характер этих атрибутов — их не следует изменять либо удалять. Таким же образом вы можете добавить свои собственные атрибуты, обозначив их как «частные», но не забывайте, что они, как и все другие, могут быть изменены.

Допустим, у нас имеется следующий класс Bird:

class Bird:
    count = 0
    def __init__(self, say):
        self.say = say
        Bird.count += 1
    def talk(self):
        return self.say

1. Начните новую программу на Python, сделав доступными функции класса Bird, созданного в предыдущем примере.

from Bird import *

2. Затем создайте экземпляр класса, после чего добавьте, используя точечную запись, новый атрибут с присвоенным значением.

chick = Bird("Cheep, cheep!")
chick.age = "1 month"

3. Теперь выведите значения, хранящиеся в обоих атрибутах экземпляра.

print( '\nChick Says:' , chick.talk() )
print( 'Chick age:' , chick.age )

4. Измените новый атрибут с помощью точечной записи и выведите его новое значение.

chick.age = "2 month"
print( 'Chick Now:' , chick.age )

5. Опять измените новый атрибут, используя в этот раз встроенную функцию.

setattr(chick, 'age', '3 month')

6. После этого выведите список всех атрибутов экземпляра, не являющихся частными, и соответствующие им значения, используя встроенную функцию.

print( '\nChick Attributes...' )
for atttribute in dir( chick ):
    if atttribute[0] != '_':
        print( atttribute, ':', getattr( chick , atttribute ) )

Данный цикл пропускает все атрибуты, чьи имена начинаются с символа подчеркивания, так что «частные» атрибуты как __name__, __doc__ и т.п. не попадут в результирующий список.

7. Наконец удалите новый атрибут и проверьте его отсутствие, используя встроенные функции.

delattr(chick, 'age')
print( '\nChick age Attribute?' , hasattr( chick , 'age' ) )

Весь наш код выглядит следующим образом:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class Bird:
    count = 0
    def __init__(self, say):
        self.say = say
        Bird.count += 1
    def talk(self):
        return self.say
chick = Bird('Cheep, cheep!')
chick.age = '1 month'
print('\nChick Says:', chick.talk())
print('Chick Age:', chick.age)
chick.age = '2 month'
print('Chick Now:', chick.age)
setattr(chick, 'age', '3 month')
print('\nChick Attributes...')
for attribute in dir(chick):
    if attribute[0] != '_':
        print(attribute, ':', getattr(chick, attribute))
delattr(chick, 'age')
print('\nChick age Attribute?', hasattr(chick, 'age'))

8. Сохраните файл в вашем рабочем каталоге, затем откройте командную строку и запустите программу — вы увидите результат обращения к атрибутам экземпляра.

Доступ к атрибутам класса в языке Python

Интересное видео по теме для читателей:

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)