una texto superindice subindices subindice overleaf modo leer izquierda cadena python

texto - ¿Cómo implementar una clase de subíndice en Python(clase de subíndice, no objeto de subíndice)?



subindice overleaf (2)

Para implementar un objeto de subíndice es fácil, simplemente implemente __getitem__ en la definición de clase de este objeto.
Pero ahora quiero implementar una clase subscriptible. Por ejemplo, quiero implementar este código:

class Fruit(object): Apple = 0 Pear = 1 Banana = 2 #________________________________ #/ Some other definitions, / #/ make class ''Fruit'' subscriptable. / # -------------------------------- # / ^__^ # / (oo)/_______ # (__)/ )/// # ||----w | # || || print Fruit[''Apple''], Fruit[''Banana''] #Output: 0 2

Sé que getattr puede hacer lo mismo, pero siento que el acceso a los subíndices es más elegante.


Agrega algo como esto a tu clase:

class Fruit(object): def __init__(self): self.Fruits = {"Apple": 0, "Pear": 1, "Banana": 2} def __getitem__(self, item): return self.Fruits[item]


Parece funcionar cambiando la metaclase. Para Python 2:

class GetAttr(type): def __getitem__(cls, x): return getattr(cls, x) class Fruit(object): __metaclass__ = GetAttr Apple = 0 Pear = 1 Banana = 2 print Fruit[''Apple''], Fruit[''Banana''] # output: 0 2

En Python 3, debes usar Enum directamente:

import enum class Fruit(enum.Enum): Apple = 0 Pear = 1 Banana = 2 print(Fruit[''Apple''], Fruit[''Banana'']) # Output: Fruit.Apple, Fruit.Banana print(Fruit[''Apple''].value, Fruit[''Banana''].value) # Output: 0 2