Return the tuple of *attrs* attributes for a class or instance. The tuple also allows accessing the fields by their names (see below for examples). Args: cls (type): Class or instance to introspect. Raises: TypeError: If *cls* is neither a class nor an *attrs*
(cls)
| 1889 | |
| 1890 | |
| 1891 | def fields(cls): |
| 1892 | class="st">""" |
| 1893 | Return the tuple of *attrs* attributes for a class or instance. |
| 1894 | |
| 1895 | The tuple also allows accessing the fields by their names (see below for |
| 1896 | examples). |
| 1897 | |
| 1898 | Args: |
| 1899 | cls (type): Class or instance to introspect. |
| 1900 | |
| 1901 | Raises: |
| 1902 | TypeError: If *cls* is neither a class nor an *attrs* instance. |
| 1903 | |
| 1904 | attrs.exceptions.NotAnAttrsClassError: |
| 1905 | If *cls* is not an *attrs* class. |
| 1906 | |
| 1907 | Returns: |
| 1908 | tuple (with name accessors) of `attrs.Attribute` |
| 1909 | |
| 1910 | .. versionchanged:: 16.2.0 Returned tuple allows accessing the fields |
| 1911 | by name. |
| 1912 | .. versionchanged:: 23.1.0 Add support for generic classes. |
| 1913 | .. versionchanged:: 26.1.0 Add support for instances. |
| 1914 | class="st">""" |
| 1915 | generic_base = get_generic_base(cls) |
| 1916 | |
| 1917 | if generic_base is None and not isinstance(cls, type): |
| 1918 | type_ = type(cls) |
| 1919 | if getattr(type_, class="st">"__attrs_attrs__", None) is None: |
| 1920 | msg = class="st">"Passed object must be a class or attrs instance." |
| 1921 | raise TypeError(msg) |
| 1922 | |
| 1923 | return fields(type_) |
| 1924 | |
| 1925 | attrs = getattr(cls, class="st">"__attrs_attrs__", None) |
| 1926 | |
| 1927 | if attrs is None: |
| 1928 | if generic_base is not None: |
| 1929 | attrs = getattr(generic_base, class="st">"__attrs_attrs__", None) |
| 1930 | if attrs is not None: |
| 1931 | class="cm"># Even though this is global state, stick it on here to speed |
| 1932 | class="cm"># it up. We rely on `cls` being cached for this to be |
| 1933 | class="cm"># efficient. |
| 1934 | cls.__attrs_attrs__ = attrs |
| 1935 | return attrs |
| 1936 | msg = fclass="st">"{cls!r} is not an attrs-decorated class." |
| 1937 | raise NotAnAttrsClassError(msg) |
| 1938 | |
| 1939 | return attrs |
| 1940 | |
| 1941 | |
| 1942 | def fields_dict(cls): |