Чим відрізняється атрибут та властивість? [зачинено]


162

Здається, це означає те саме. Але який термін підходить в якому контексті?


4
Чи можете ви бути більш конкретними щодо контексту? Наприклад, терміни означають абсолютно різні речі в контексті C #.
Девід Арно

1
@David Arno - різні синтаксиси мови присвоїли одне або обидва слова, але незалежно від синтаксису певної мови, чи є різниця у значенні? Це не погане питання.
Corey Trager

4
Я думаю, це погане питання. Перевірка тезауруса покаже, що вони є синонімами в реальній мові, але різні комп'ютерні та мета мови можуть призначити їм зовсім інші ролі, і, отже, вони можуть не бути синонімами для певної комп'ютерної мови. Отже, контекст - це все.
Девід Арно

9
Я більше .... співчуваюча. Пам’ятаю, коли я вперше почув термін «метод». Що за чорт - це "метод"? О, це те, що ви називаєте функцією, коли вона належить до класу. Чому нова термінологія для чогось старого? Торо сказав: "остерігайтеся всіх підприємств, яким потрібен новий одяг". (або слова ...)
Corey Trager

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, ціле призначення ширини не виконує жодної функції, якщо ви розбираєте документ без будь-якого наміру відображати / надавати його на сторінку.
Бретт Касвелл

Дякую! Я прийшов сюди, шукаючи вказівки щодо того, коли використовувати цей термін під час назви. Мені навіть байдуже (багато), чи це технічно правильно чи ні, це дійсно корисна відмінність.
користувач1433150

1
Це тип відповіді, який я також шукав. Чому має значення контекст або те, що вирішив будь-який конкретний інженер мови Можливо, вони прийняли довільне або неосвічене рішення. Я хочу зробити освіченого, і це дає мені конкретні причини вибрати один за іншим. Це також може уточнити, чому конкретний виконавець зробив свій вибір.
bielawski

2
Що для мене працює - це вважати властивості об’єктивними, а атрибути - відносними / суб'єктивними. Такі властивості, як колір, форма, оцінка, швидкість вітру, температура (98 'F) та інші об'єктивні або вимірювані факти, створюють хороші властивості. Такі характеристики, як текстура ("м'яка"), умови ("вітряно"), температура ("гаряче") та інші твердження, які не безперечно вірні, покращують атрибути.
Іван

20

Часто атрибут використовується для опису механізму або речі реального світу.

Властивість використовується для опису моделі.

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

Клас, який моделює документи, має властивість вказувати, є це чернетка чи ні. У цьому випадку майно захоплює державу.


1
Чи означає це, властивість примірника є атрибутом?
Абдуррахім

Інтригуюче, але я не вірю в це. З огляду на документ, екземпляр атрибута може бути аркушем паперу; Екземпляр властивості, що представляє модель, може бути буфером, достатньо великим для вмісту зазначеної статті.
Уолт Стоунбернер

17

Атрибут - це фактична річ, якою ви користуєтесь, наприклад, у своєму тезі HTML

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

У цьому екземплярі тип та позначені є атрибутами. Однак властивість - це значення цих атрибутів, які браузер зберігає всередині елемента DOM. Часто значення атрибутів і властивостей рівні, саме це робить його таким заплутаним.

У цьому прикладі елемент DOM inputмає властивість typeзі значенням, "checkbox"а властивість checkedзі значеннямtrue (зверніть увагу, чим це значення відрізняється від значення всередині атрибута HTML).

Використовуючи Firebug, ви можете спостерігати за поведінкою властивостей при натисканні на елемент та виборі "перегляду DOM".


Це може бути прийнята відповідь. Це і однозначно в теорії, і корисно в контексті.
Jaune

15

Точне значення цих термінів багато в чому залежатиме від того, якою мовою / системою / Всесвітом ви говорите.

У HTML / XML атрибут - це частина тегу зі знаком рівності та значення, а властивість, наприклад, нічого не означає.

Тому нам потрібна додаткова інформація про те, який саме домен ви обговорюєте.


7
Це неправильно. Дивіться відповідь Альнітака.
kba

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 (і делетер).

Атрибут, як правило, є одним об'єктом всередині іншого об'єкта.

Сказавши, що, однак, Python дає вам такі методи, __getattr__які дозволяють розширити визначення поняття "атрибут".

Підсумок - вони майже синонімічні. Python робить технічну відмінність у тому, як вони реалізовані.


2

У Java (або інших мовах) використання властивостей / атрибутів залежить від використання:

  • Властивість, яка використовується, коли значення не змінюється дуже часто (зазвичай використовується при запуску або для змінної середовища)

  • Атрибути - це значення (дочірнє об'єкт) Елемента (об'єкта), яке може змінюватися дуже часто / весь час і бути або не стійким


2

У HTML видається, що атрибути є специфічними для дерева DOM, тоді як властивості використовуються для опису характеристик елементів DOM


2

Чим відрізняється атрибут та властивість?
Яка різниця між функцією та функцією? Чим відрізняється Характер від Характера? Яка різниця між діянням та поведінкою?

Це просто зміна контексту.

Об'єкт, продукт, особистість, особа

Людина діє в поведінці. Особистість має характеристики даного характеру. Продукт має особливості, які отримують функціональність. Об'єкт мав атрибути, які надають йому властивості.


Це насправді хороша відповідь.
анонім

1
<property attribute="attributeValue">proopertyValue</property>

був би один із способів поглянути на це.

В C #

[Attribute]
public class Entity
{
    private int Property{get; set;};

8
Вибачте, що проголосували за це, але в XML те, що ви позначили властивістю, є фактично "елементом"
Харальд Шейріх

@HaraldScheirich повільна відповідь;), але елемент справді називається "властивість", щоб зрозуміти зв'язок з Entity.Property. Не звичайно елементи XML насправді називати "елементом"
голуб

1

Delphi використовував властивості, і вони знайшли шлях до .NET (тому що він має того самого архітектора).

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

Властивості не завжди пов'язані з полями. Це можуть бути функції, які можуть мати побічні ефекти (але, звичайно, це дуже поганий дизайн).


Не обов'язково. Автоматизована брудна перевірка стійкого об’єкта буде прикладом властивості з побічними ефектами, які не будуть поганим дизайном.
Дивовижна
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.