创建带有额外属性的元组类对象

2024-10-02 10:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种Pythonic的方法来创建一个类似元组的对象(它的行为类似于元组),但具有附加属性?尤其是使用__name__属性?在

现在我做这样的事情:

foo = ( 1, 9, (12.5, "bar"), "baz" )
foo.__name__ = 'foo'

但我觉得那不是很像Python。我不能将foo(元组赋值的第一行)传递给函数,并让函数创建__name__。在

Python的方式是什么?在

我要找的东西是:

^{pr2}$

结果是:

(12.5, 'floob')
1
'bar'

Tags: 对象方法函数name属性foo方式bar
3条回答

使用namedtuple(https://docs.python.org/3/library/collections.html#collections.namedtuple

from collections import namedtuple
Foo = namedtuple('Foo', ['x', 'y', 'pair', 'title'])
foo = Foo(1, 9, (12.5, "bar"), "baz") # foo.x == 1, foo.y == 9, etc
bar = Foo(2, 10, (11., "abc"), "zzz")

像这样简单的事情怎么样:

class TupleWithName(tuple):
    pass

t = TupleWithName((1, 2, 3))
t.name = 'tuple one'

print(t)
# (1, 2, 3)

print(t.name)
# 'tuple one'

只需创建继承自元组的新类并重写__new__和{}方法:

class MyTuple(tuple):
    def __new__(cls, name, values):
        return super().__new__(cls, values)

    def __init__(self, name, values):
        self.__name__ = name
        self.values = values

foo = MyTuple('foo', (1, 2, 3))

print(foo)
print(foo.__name__)

输出:

^{pr2}$

相关问题 更多 >

    热门问题