我最近在 Stack Overflow 上看了几个关于元类的问题,虽然它似乎并不是大多数情况下(包括我的问题)必需使用的东西,但我认为对于这种情况来说很有趣。
在 Python 的文档中,有一个关于 namedtuple 的例子,链接在此处:namedtuple
from collections import namedtuple
Student = namedtuple('Student', 'name serialnum school gradelevel')
Student._make(unpack('<10sHHb', record))
我的问题是:是否可以创建一个元类来帮助我完成部分工作?我的预期解决方案是:
class Student(object):
__metaclass__ = ???
fields = 'name serialnum school gradelevel'
struct = '<10sHHb'
s = Student(record) # and give same output as the _make() call above
我应该如何做这件事?
self.__name__
来获取你正在使用的类的名称,这样你就可以在构造函数中构建一个namedtuple
,而不用考虑你实际给类取的名字。 - 2rs2tssetattr
来完成这个任务。虽然我不太熟悉struct
模块,但是我认为可以传入结构字符串并对其进行解包,然后根据解包结果使用setattr
。 - 2rs2ts