这是一个比任何其他问题都更令人好奇的问题。我是Python的新用户,并在玩它。我刚刚看了base64模块。如果不做:
import base64
string = 'Foo Bar'
encoded = base664.b64encode
我想做些类似的事情:
^{pr2}$有没有一种简单的python方法来创建这个类?在
我从这个开始:
>>> class b64string(base64):
... def __init__(self, v):
... self.value=v
我已经得到:
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)
别让我开始(只是想看看会发生什么):
>>> 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
我知道如何通过在一个新类中列出base64的所有属性并用存储值作为参数来调用它们,从而手动完成这项工作。但是有没有一种干净的,Python式的方法来做到这一点呢?这样做是个坏主意吗?这个想法是,如果需要的话,用很多这样的模块来做,并且使用“超级字符串”作为模块来处理我需要做的所有事情。这很糟糕吗?它不是Python吗?如果是Python,怎么做?在
我不认为创建如此复杂的类似字符串的类是一个好主意,但是如果您真的想这样做,下面是一个简单的片段,它运行您的示例。在
首先,我们定义一个类,它是一个泛型字符串包装器。它的核心是一个}作为第一个参数,并记住
__getattr__
函数,它将每个方法调用转发给给定的self.module
,添加{self.string
上的结果。在创建具有base64功能的字符串包装器很容易:
^{pr2}$注意,上面的示例之所以有效,是因为
b64encode
和b64decode
将字符串作为第一个参数,并返回一个字符串作为结果(我的__getattr__
函数中没有验证)。来自某个随机模块的随机函数可能会引发某种异常。因此,毕竟,最好是将使用限制为来自给定模块的预定义函数集,但现在应该很容易了。在我再说一遍,我不建议在任何严肃的项目中使用这样的代码,只是为了好玩。在
相关问题 更多 >
编程相关推荐