Определение атрибута - PullRequest
1 голос
/ 13 марта 2020

В настоящее время я пишу статью по python основам, и мне нужна некоторая помощь по этому вопросу, так как я не смог найти единого непротиворечивого определения для атрибута

class Person:
    def __init__(self,weight):
        self.weight = weight

Атрибут - это то, что описывает объект для например, вес = 75. В данном случае, что такое атрибут, точно это 75, или это вес (переменная), или является комбинацией как переменной, так и значения.

Некоторые люди говорят, что атрибут - это данные хранится в объекте, что является правильным, если мы считаем 75 атрибутом.

Некоторые люди называют атрибут переменными экземпляра и класса, которые хранят данные, относящиеся к классу и экземпляру, что правильно, если мы рассмотрим вес, являющийся атрибутом (имя переменной)

Некоторые атрибуты вызова объединяют имя и значение, что означает, что вес = 75 в целом становится атрибутом

Все приведенные выше определения немного отличаются если мы go в буквальном смысле слова и люди используют их взаимозаменяемо

Являюсь ли я что-то упустил ??

Мне просто нужно быть уверенным, прежде чем я отправлю черновик на мой HOD

Спасибо всем

Пожалуйста, будьте осторожны и избегайте путешествий как можно больше Chyanit

Ответы [ 3 ]

2 голосов
/ 14 марта 2020

TLDR: атрибутом является значение , созданное при поиске имени атрибута.


В соответствии с Python справочником по языку, ссылками на атрибуты, в операторе

value = obj.name

obj.name - ссылка на атрибут, name - имя атрибута, а полученный value - атрибут. Обратите внимание, что value является атрибутом в данном случае , потому что он был создан ссылкой на атрибут, а не потому, что он по своей сути связан. Например, ссылка на атрибут может производить новый value каждый раз, когда он оценивается.

Первичный объект должен оценивать объект типа, который поддерживает ссылки на атрибуты, что и большинство объектов. Затем этот объект просят создать атрибут, имя которого является идентификатором . Это производство может быть настроено путем переопределения метода __getattr__(). Если этот атрибут недоступен, возникает исключение AttributeError. В противном случае тип и стоимость создаваемого объекта определяются объектом. Несколько оценок одного и того же атрибута могут давать разные объекты.

В назначении атрибута, например

obj.name = value

, value делает не обязательно станет атрибутом. Если имя атрибута указывает на дескриптор данных , value может быть сохранено, изменено или отброшено.

1 голос
/ 14 марта 2020

Сначала поговорим об общих объектах в Python. Документация определяет 3 характеристики для каждого объекта:

  • identity

    Идентификация объекта никогда не изменяется после его создания; вы можете думать об этом как об адресе объекта в памяти.

  • type

    Тип объекта определяет операции, которые объект поддерживает (например, «имеет ли он длину?»), А также определяет возможные значения для объектов этот тип. Функция type () возвращает тип объекта (который сам является объектом). Как и его идентичность, тип объекта также неизменен.

  • value

    Значение некоторых объектов может изменяться. Объекты, чье значение может измениться, называются изменяемыми; объекты, значение которых неизменяемо после их создания, называются неизменяемыми.

Понимание объектов означает понимание типов, но типы также являются объектами. Эти TypeObjects являются одной из наиболее важных структур в Python и определяют основные c функциональные возможности объекта. В частности, они реализуют функции getattr и setattr.

Поведение по умолчанию для этой реализации описано здесь :

Поведение по умолчанию для доступа к атрибутам - получение, установка или удаление атрибута из объекта. толковый словарь. Например, a.x имеет цепочку поиска, начинающуюся с a.__dict__['x'], затем type(a).__dict__['x'] и продолжающуюся через базовые классы type(a), исключая метаклассы. Если искомое значение является объектом, определяющим один из методов дескриптора, то Python может переопределить поведение по умолчанию и вместо этого вызвать метод дескриптора. [...]

методы для класса или экземпляра, которые могут перезаписать поведение по умолчанию: __get__, __set__ и __delete__.

В документации для метода __get__ указано:

Этот метод должен возвращать вычисленное значение атрибута или вызывать исключение AttributeError.

Обобщение всех Приведенное выше формальное определение атрибута my будет выглядеть следующим образом:

  • атрибуты - это объекты с идентичностью, типом и значением
  • , которыми они владеют другой объект

Дополнительная литература:

https://docs.python.org/3/reference/datamodel.html

https://docs.python.org/3/c-api/typeobj.html

https://docs.python.org/3/howto/descriptor.html?highlight=descriptor

https://realpython.com/python-descriptors/

0 голосов
/ 14 марта 2020

По сути, атрибут является характеристикой c объекта / объекта. Он описывает качества объекта.

Например, если у вас есть класс Employee, имеющий employee_id как X1234, этот employee_id является характеристикой c сотрудника, которую можно использовать для идентификации сотрудника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...