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`
    - `Callable`
  - `ValueModel`
    - `Model`

no subtypes hierarchy

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

Methods
`bind` | Source Code `shared formal Value<Get,Set> bind(Object container)` Type-unsafe container binding, to be used when the container type is unknown until runtime. This has the same behaviour as invoking this `Member` directly, but exchanges compile-time type safety with runtime checks. Refines `Member.bind`

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