В чем разница между атрибутом и свойством? [закрыто]

162

Кажется, это означает одно и то же. Но какой термин больше подходит в каком контексте?

каустика
источник
4
Можете ли вы быть более конкретным о контексте? Например, термины означают совершенно разные вещи в контексте C #.
Дэвид Арно
1
@ Дэвид Арно - разные языковые синтаксисы присваивают одно или оба слова, но независимо от синтаксиса конкретного языка, есть ли разница в значении? Это не плохой вопрос.
Кори Трагер
4
Я думаю, что это плохой вопрос. Проверка тезауруса покажет, что они являются синонимами в реальных языковых терминах, но разные компьютерные и метаязыки могут назначать им совершенно разные роли и, следовательно, они могут не быть синонимами для определенного компьютерного языка. Так что контекст - это все.
Дэвид Арно
9
Я более .... сочувствующий. Я помню, как впервые услышал термин «метод». Какого черта это «метод»? О, это то, что вы называете функцией, когда она принадлежит классу. Почему новая терминология для чего-то старого? Торо сказал: «Остерегайтесь всех предприятий, которым требуется новая одежда». (или слова ...)
Кори Трагер
1
Этот вопрос является слишком широким без предоставления некоторого контекста (как написано, на него можно ответить только со списком всех возможных контекстов).
Квентин

Ответы:

199

В общих терминах (и при обычном использовании английского языка) термины означают одно и то же.

В конкретном контексте HTML / Javascript эти термины путаются, потому что HTML-представление элемента DOM имеет атрибуты (то есть термин, используемый в XML для пар ключ / значение, содержащихся в теге), но при представлении в виде объекта JavaScript эти атрибуты появляются как свойства объекта .

Чтобы еще больше запутать вещи, изменения в свойствах обычно обновляют атрибуты.

Например, изменение element.href свойства обновит href атрибут элемента, и это будет отражено в вызове element.getAttribute('href').

Однако если вы впоследствии прочитаете это свойство, оно будет нормализовано до абсолютного URL, даже если атрибут может быть относительным URL!

Альнитак
источник
14
Это должен быть принятый ответ!
Рубенс Мариуццо
3
@RubensMariuzzo, какой бы точной она ни была, здесь нет ответа .. она просто уточняет возможную путаницу для людей, учитывая контекст.
Бретт Касуэлл
@BrettCaswell, я думаю, что в контексте DOM (HTML / JS) этот ответ мне ясно и просто объясняет разницу.
Рубенс Мариуццо
1
@Alnitak Четкий ответ. Я сделал один век для вас.
mkHun
Я родом из python. Могу ли я использовать термин class attributeи instance property?
Сарит
71

Эти слова существовали задолго до появления информатики.

  1. Атрибут - это качество или объект, который мы приписываем кому-то или чему-либо. Например, скипетр является атрибутом власти и государственности.

  2. Собственность - это качество, которое существует без какой-либо атрибуции . Например, глина обладает адгезионными свойствами; или одним из свойств металлов является электропроводность. Свойства демонстрируют себя, хотя физические явления без необходимости приписывают их кому-то или чему-либо. К тому же, утверждение, что у кого-то есть мужские качества, самоочевидно. По сути, вы можете сказать, что собственность принадлежит кому-то или чему-то.

Чтобы быть справедливым, хотя, в информатике эти два слова, по крайней мере, по большей части, могут использоваться взаимозаменяемо - но опять же программисты обычно не имеют степеней в английской литературе и не пишут или заботятся о грамматике :).

Джордж
источник
1
Ты ближе к смыслу, насколько я понимаю. Атрибут является описателем типа, он описывает объект вне контекста (например, интерпретатор) ... то есть, есть контекст, но этот контекст вполне может быть взаимозаменяемым. Например, чтобы использовать HTML, вся ширина не имеет смысла, если вы анализируете документ без какого-либо намерения отобразить / отобразить его на странице.
Бретт Касуэлл
Спасибо! Я пришел сюда в поисках руководства о том, когда использовать какой термин при именовании. Меня даже не волнует (сильно), если это технически правильно или нет, это действительно полезное различие.
user1433150
1
Это тот тип ответа, который я тоже искал. Почему имеет значение контекст или то, что решил конкретный языковой исполнитель. Возможно, они приняли произвольное или необразованное решение. Я хочу сделать образованный, и это дает мне конкретные причины выбирать один над другим. Это также может прояснить, почему конкретный исполнитель сделал свой выбор.
Белавский
2
Что для меня работает, так это рассматривать свойства как объективные, а атрибуты как относительные / субъективные. Такие свойства, как цвет, форма, оценка, скорость ветра, температура (98 'F) и другие объективные или измеримые факты делают хорошие свойства. Такие свойства, как текстура («мягкая»), условия («ветреная»), температура («горячая») и другие утверждения, которые, несомненно, не являются истинными, способствуют улучшению атрибутов.
Иван
20

Часто атрибут используется для описания механизма или реальной вещи.

Свойство используется для описания модели.

Например, документ (сидящий на вашем столе) может иметь атрибут, который является черновиком.

Класс, который моделирует документы, имеет свойство указывать, является ли это черновиком. В этом случае собственность захватывает государство.

Уолт Стоунбернер
источник
1
Означает ли это, что свойство экземпляра является атрибутом?
Абдуррахим
Интригует, но я не верю в это. Для данного документа экземпляром атрибута может быть лист бумаги; экземпляр свойства представления модели может быть достаточно большим буфером для содержимого указанной статьи.
Уолт Стоунбернер
17

Атрибут - это фактическая вещь, которую вы используете в своем HTML-теге, например

<input type="checkbox" checked="checked" />

В этом случае тип и проверенные являются атрибутами. Свойство, тем не менее, является значением этих атрибутов, которое браузер сохраняет внутри элемента DOM. Часто значения атрибутов и свойств равны, вот что делает его таким запутанным.

В этом примере элемент DOM inputимеет свойство typeсо значением "checkbox"и свойство checkedсо значением true(обратите внимание, как это значение отличается от значения внутри атрибута HTML).

Используя Firebug, вы можете наблюдать за поведением свойств, щелкая элемент и выбирая «DOM view».

smonusbonus
источник
Это может быть принятым ответом. Это ясно в теории и полезно в контексте.
Jaune
15

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

В HTML / XML атрибут является частью тега со знаком равенства и значением, а свойство ничего не значит, например.

Поэтому нам нужно больше информации о том, какой домен вы обсуждаете.

Нед Бэтчелдер
источник
7
Это не правильно. Смотрите ответ Алнитак.
КБА
6

В Python ...

class X( object ):
    def __init__( self ):
        self.attribute
    def getAttr( self ):
        return self.attribute
    def setAttr( self, value ):
        self.attribute= value
    property_name= property( getAttr, setAttr )

Свойство - это одноименное имя, похожее на атрибут, которое объединяет в себе набор функций setter, getter (и deleter).

Атрибут обычно представляет собой отдельный объект внутри другого объекта.

Сказав это, однако, Python предоставляет вам методы, __getattr__которые позволяют вам расширить определение «атрибута».

Итог - они почти синонимы. Python делает техническое различие в том, как они реализованы.

С. Лотт
источник
2

В Java (или других языках) использование Property / Attribute зависит от использования:

  • Свойство, используемое, когда значение меняется не очень часто (обычно используется при запуске или для переменной среды)

  • Атрибуты - это значение (дочерний объект) элемента (объекта), которое может изменяться очень часто / постоянно и быть или не быть постоянным

Эрик
источник
2

В HTML кажется, что атрибуты специфичны для дерева DOM, а свойства используются для описания характеристик элементов DOM

goonerify
источник
2

В чем разница между атрибутом и свойством?
В чем разница между функцией и функцией? В чем разница между характеристикой и характером? В чем разница между актом и поведением?

Это просто изменение контекста.

Объект, продукт, Личность, Человек

Человек действует в поведении. Личность имеет характеристики данного персонажа. Продукт имеет функцию, которая выводит функциональность. Объект имел Атрибуты, которые придают ему Свойства.

общий
источник
Это на самом деле хороший ответ.
аноним
1
<property attribute="attributeValue">proopertyValue</property>

был бы один способ посмотреть на это.

В C #

[Attribute]
public class Entity
{
    private int Property{get; set;};
голубь
источник
8
Извините за это, но в XML то, что вы назвали свойством, на самом деле является «элементом»
Харальд Шейрих
@HaraldScheirich медленный ответ;) но элемент действительно называется «свойством», чтобы прояснить связь с Entity.Property. Обычно элементы xml на самом деле называют «элементами»
dove
1

Delphi использовал свойства, и они нашли свой путь в .NET (потому что у него та же архитектура).

В Delphi они часто используются в сочетании с информацией о типе среды выполнения, так что встроенный редактор свойств можно использовать для установки свойства во время разработки.

Свойства не всегда связаны с полями. Это могут быть функции, которые могут иметь побочные эффекты (но, конечно, это очень плохой дизайн).

Тун Крижте
источник
Не обязательно. Автоматическая грязная проверка на постоянном объекте была бы примером свойства с побочными эффектами, которые не были бы плохим дизайном.
Ужасно