将 python 中的 namedtuple 中的字段小写
Lowercase a field in namedtuple in python
我有这个 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'
我有这个 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'