An attribute model represents the model of a Ceylon attribute that you can read and inspect.

An attribute is a member value: it is declared on classes or interfaces.

This is both a `ValueModel` and a `Member`: you can invoke it with an instance value to bind it to that instance and obtain a `Value`:

    class Outer(){
        shared String foo = "Hello";
    }

    void test(){
        Attribute<Outer,String> attribute = `Outer.foo`;
        Value<String> boundAttribute = attribute(Outer());
        // This will print: Hello
        print(boundAttribute.get());
    }

no type hierarchy

- `Attribute`
  - `Member`
    - `Qualified`
      - `Callable`
  - `ValueModel`
    - `Model`
      - `Declared`

no subtypes hierarchy

Attributes
`declaration` | Source Code `shared formal ValueDeclaration declaration` The declaration model of this attribute, which is necessarily a `ValueDeclaration`. Refines `ValueModel.declaration` ultimately refines `Declared.declaration`

Inherited Attributes
Attributes inherited from: `Object` `hash`, `string`
Attributes inherited from: `Declared` `container`, `declaration`
Attributes inherited from: `Member<Container,Kind>` `declaringType`
Attributes inherited from: `Model` `container`, `declaration`
Attributes inherited from: `ValueModel<Get,Set>` `declaration`, `type`

Methods
`bind` | Source Code `shared formal Value<Get,Set> bind(Object container)` Binds this attribute to the given container instance. The instance type is checked at runtime. Throws `StorageException` If this attribute is not stored at runtime, for example if it is neither shared nor captured. Refines `Qualified.bind`

Inherited Methods
Methods inherited from: `Object` `equals()`
Methods inherited from: `Qualified<Kind,Container>` `bind()`