Un objet « thing » est un mapping non-itérable, les clefs et valeurs qu'il fournit dépendant du type d'objet en question. C'est également un objet écoutable. En complément des méthodes fournies par ces interfaces, il présente les méthodes et attributs suivants :
path
représente la chaîne de caractère servant à identifier l'objet. Elle ne change pas et l'objet identifié par cette chaîne sera toujours le même. Il est par contre possible que plusieurs chaînes correspondent au même objet.states
est un frozenset
contenant les états actuels de l'objet, qui peuvent donc changer au fil du temps. Il s'agit d'un ensemble de chaînes de caractères non-vides, généralement constitués de caractères alphabétiques, dépendant du type de trucs en question.read
/stream
sont des méthodes permettant d'obtenir le contenu actuel du « truc » considéré, lorsqu'il y en a un. Ces deux méthodes prennent un paramètre, booléen, indiquant si on veut récupérer un objet de type bytes
(si vrai) ou str
(si faux). L'un ou l'autre ne sera pas toujours possible. Lorsqu'il n'y a pas de contenu lisible, la méthode read
renvoie None
sans déclencher d'erreur. La méthode stream
est destinée à être utilisée dans un bloc with
, des erreurs peuvent éventuellement se produire à l'intérieur de ce bloc quand on tente d'accéder au contenu du flux.write
, dans le même ordre d'idées, permet de modifier le contenu. L'objet qu'on lui passe en paramètre sera au besoin converti en str
ou en bytes
. S'il n'est pas possible d'écrire un contenu, cette méthode échoue silencieusement (en toute logique, les trucs pour lesquels on peut interagir avec du contenu devraient indiquer les états « readable » et/ou « writable »).request
est une méthode permettant de demander gentiment à un truc de faire quelque chose, en lui passant une chaîne de caractère représentant l'action en question (par exemple « close », « volume:up » ou « moveto:X »). Si l'action n'est pas comprise ou pas possible, aucune erreur n'est déclenchée. Dans le meilleur des cas, cette méthode, comme la méthode write
, renvoie vrai si elle a fonctionné ou faux si elle a échoué, mais dans pas mal de cas, elle renvoie None
indiquant que l'action est toujours en cours ou qu'il n'est pas possible de savoir.icon
permet d'obtenir une chaîne de caractère décrivant l'icône, à passer ensuite au module de chargement d'images. Cette méthode prend un paramètre indiquant la taille que doit avoir l'icône et les éventuels états (pouvant être différents de l'état actuel) pour ajuster l'apparence de l'icône.__bool__
indique si l'objet existe présentement ou pas. Ça peut donc changer au fil du temps et c'est un des tests principaux pour grouper les thing dans des stuff.can
et has
permettent de se renseigner sur les requêtes auxquelles le truc peut répondre, et sur les différentes valeurs qu'il est capable de renseigner (selon leurs clefs ou des tests plus avancés, voir ci-dessous).parent
et children
permettent de récupérer le thing
parent (s'il y a lieu, sinon None
), et les enfants, sous la forme d'un stuff
éventuellement vide. La première est une propriété, la seconde une méthode qui peut prendre quelques filtres supplémentaires en paramètre.control
est un objet aux propriétés variables pour intéragir de manière plus détaillée avec chaque truc (voir les détails dans chaque spécification.)Un « stuff » est un objet permettant de lister un certain nombre de « trucs » à la fois. Comme pour les « trucs », un « stuff » est désigné par une chaîne de caractères, qui spécifie ce qu'on veut pouvoir utiliser au juste :
Dans le cas du « :has(key) », il est également possible d'ajouter une vérification sur la valeur actuelle en ajoutant après la clef un point d'interrogation, puis un symbole indiquant quel type de vérification (parmi = ≠ < > ≤ ≥ ⊂ ⊃ ⊆ ⊇ ⊄ ⊅ ∋ ∌ ∈ ∉ ⥢ ⥤), puis la valeur à tester, après conversion automatique si besoin.
Un stuff est lui-même un objet itérable et écoutable, déclenchant un appel aux fonctions à chaque changement dans la liste, mais également à chaque modification sur l'un des trucs concernés. On peut accéder aux différents trucs par leur indice, mais ce sont environ les seules fonctions disponibles.