Автор оригинала: Chris.
Python Атрибут класса является переменным, которая принадлежит к классу, а не на индивидуальном экземпляре, и совместно используется между всеми случаями. Атрибут экземпляра это переменная, которая принадлежит ровно одному объекту. Атрибут экземпляра определен внутри __init __ ()
Способ, используя ссылку на я SEA, тогда как определен атрибут класса вне __init __ ()
метод.
Как вы проходите через это руководство, не стесняйтесь смотреть мое видео объяснение:
Сегодня вы собираетесь узнать о терминология «Атрибуты» Потому что вам нужно понимать термин и концепции срока, чтобы иметь возможность освоить более продвинутые вещи.
Есть два типа атрибутов: Атрибуты класса и Атрибуты экземпляра.
- Атрибуты класса являются переменными, которые определены для самого класса. Атрибуты классов совместно используются всеми экземплярами – изменение будет видно во всех случаях.
- Атрибуты экземпляра являются переменными, которые определены для каждого экземпляра отдельно. Если один экземпляр изменяет переменную экземпляра, другие переменные экземпляра не влияют.
Класс атрибутов
Атрибуты класса являются переменными, которые определены для самого класса. Атрибуты классов совместно используются всеми экземплярами – изменение будет видно во всех случаях.
Это можно увидеть в следующем примере, где как автомобильные экземпляры P1 и P2 имеют одно и то же класс атрибута. Если вы измените его для класса, оба экземпляра см. Изменение?
class Car: brand = 'porsche' # Class attribute # Create two instances p1 = Car() p2 = Car() # Change the class attribute Car.brand = 'tesla' # Check the value of the class attributes of both instances print(p1.brand) print(p2.brand)
Выходный фрагмент кода:
tesla tesla
Итак, оба экземпляра видят атрибут измененного класса.
Атрибуты экземпляра
Атрибуты экземпляра являются переменными, которые определены для каждого экземпляра отдельно. Если один экземпляр изменяет переменную экземпляра, другие переменные экземпляра не влияют.
Следующий код показывает, что изменение атрибута экземпляра одного экземпляра не изменит атрибут экземпляра другого экземпляра.
class Car: def __init__(self): self.brand = 'porsche' # Instance attribute # Create two instances p1 = Car() p2 = Car() # Change the instance attribute p1.brand = 'tesla' # Check the value of both instances' attributes print(p1.brand) print(p2.brand)
Следовательно, вывод:
tesla porsche
Давайте сделаем эти различия палку в свой мозг с тремя головоломками быстрого кода, будем ли мы?
Пазлы класса VS
Давайте посмотрим на пример, подписываемый одним из моих абонентов по электронной почте (я немного изменил его для равенства покровителей). Кстати, подпишитесь на мой список, чтобы получить бесплатные чис-листы Python, пазлы кода, уроки Python и участвуют в конкурсах кодовых конкурсов. Это огромное веселье – вы увидите! 🤓 🐍
class Partner: database = [] def __init__(self, name, age, likes_me): self.database.append(self) self.name = name self.age = age self.likes_me = likes_me Maria = Partner("Maria", 21, False) Florian = Partner("Florian", 116, False) Eve = Partner("Eve", 22, True) Fiona = Partner("Fiona", 55, True) for partner in Partner.database: if partner.age<25 and partner.likes_me==True: print(partner.name +"(age " + str(partner.age) + ") likes you!")
Головоломка 1: Какая вывод фрагмента кода?
В этом примере показаны оба типа атрибутов: атрибуты класса «База данных» и атрибуты экземпляра «Имя», «Возраст» и «likes_me».
Атрибут класса определяется за пределами конструктора __init __ (…). Вы просто создаете и инициализируете переменную в классе (например. База данных = [] «В примере). Снаружи мы получаем доступ к этой переменной через класс (E.g. Partner.database) не через экземпляр (например, Maria.database).
Тем не менее, мы действительно можем получить доступ к атрибуту класса через каждый экземпляр, как это:
print(Fiona.database == Maria.database)
Puzzle 2: Что такое вывод фрагмента кода?
Это отличается от атрибутов экземпляра:
print(Fiona.age == Maria.age)
Головоломка 3: Что такое вывод фрагмента кода?
Ответы на головоломки приведены ниже в конце этой статьи.
Резюме
Подводя итоги, атрибуты классов совместно используются между всеми случаями определенного класса. Измените атрибут класса и все экземпляры увидят изменения.
Атрибуты экземпляра индивидуальны для одного экземпляра. Измените атрибут экземпляра, и только этот экземпляр будут изменены данные
Ответы головоломки
Вот ответы на вышеуказанные кодовые головоломки.
## Puzzle 1: Eve(age 22) likes you! ## Puzzle 2: True ## Puzzle 3: False
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.
Оригинал: “https://blog.finxter.com/python-attributes/”