python中namedtuple中的小写字段



我有这个namedtuple和重新定义的__str__()

class MyTuple(namedtuple('MyTuple', 'field1 field2')):
    __slots__ = ()                                                                                                    
    def __str__(self):
        return '{}:{}'.format(self.field1, self.field2)

每次创建实例时,我还希望将第一个字段的值小写,以便得到:

>>>s = MyTuple('FOO','BAR')
>>>print s
foo:BAR
不是

FOO:BAR

__str__()中修改它不是我的情况下的解决方案

您可以覆盖__new__静态方法并在那里应用小写字母:

class MyTuple(namedtuple('MyTuple', 'field1 field2')):
    __slots__ = ()                                                                                                    
    def __new__(cls, field1, field2):
        """Create a new instance of MyTuple(field1, field2)"""
        return super(MyTuple, cls).__new__(cls, field1.lower(), field2)
    def __str__(self):
        return '{}:{}'.format(self.field1, self.field2)
演示:

>>> from collections import namedtuple
>>> class MyTuple(namedtuple('MyTuple', 'field1 field2')):
...     __slots__ = ()                                                                                                    
...     def __new__(cls, field1, field2):
...         """Create a new instance of MyTuple(field1, field2)"""
...         return super(MyTuple, cls).__new__(cls, field1.lower(), field2)
...     def __str__(self):
...         return '{}:{}'.format(self.field1, self.field2)
... 
>>> mt = MyTuple('FOO', 'BAR')
>>> mt
MyTuple(field1='foo', field2='BAR')
>>> print(mt)
foo:BAR
>>> mt.field1
'foo'
>>> mt.field2
'BAR'

最新更新