C'est plus une question de curiosité qu'autre chose. Je suis nouveau avec Python et je joue avec. Je viens de regarder le module base64. Et si au lieu de faire:Comment ajouter des capacités à des chaînes en Python
import base64
string = 'Foo Bar'
encoded = base664.b64encode
que je voulais faire quelque chose comme:
>>> class b64string():
>>> <something>
>>>
>>> string = b64string('Foo Bar')
>>> string
'Foo Bar'
>>> string.encode64()
'Rm9vIEJhcg=='
>>> string
'Rm9vIEJhcg=='
>>> string.assign('QmFyIEZvbw==')
>>> string
'QmFyIEZvbw=='
>>> string.b64decode()
'Bar Foo'
>>> string
'Bar Foo'
est-il un moyen simple, pythonique pour créer cette classe?
J'ai commencé avec ceci:
>>> class b64string(base64):
... def __init__(self, v):
... self.value=v
Et déjà je reçois:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
et ne vous a commencé à me (juste pour voir ce qui se passerait) pas:
>>> class b64string(str, base64): pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
Je sais comment le faire manuellement en listant tous les attributs de base64 dans une nouvelle classe et en les appelant avec la valeur stockée sous argu. ment. Mais y a-t-il une manière propre et pythonique de faire cela? Est-ce une mauvaise idée de le faire? L'idée serait, si nécessaire, de le faire avec beaucoup de ces modules et d'avoir des "super strings" qui auraient comme modules tout ce que je devrais faire avec eux. Est-ce mauvais? Est-ce un-pythonic? Si c'est pythonique, comment ça se fait?
Un problème avec '' Foo Bar'.encode ("base64") '? – YOU
Je ne suis pas encore assez sage dans la manière de Python de répondre à votre question principale, mais votre message d'erreur au moins est d'essayer de sous-classer 'base64', qui est un module et non une classe. – shambulator