创建具有其他属性的类似元组的对象?

时间:2018-09-01 20:33:38

标签: python python-3.x

是否有Python方式创建类似元组的对象(其行为类似于元组)但具有其他属性?尤其是带有__name__属性?

现在我做这样的事情:

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

但是,我认为那不是非常Pythonic。我无法将foo(具有元组分配的第一行)传递给一个函数,而不能让该函数创建__name__

什么是Python方式?

我正在寻找类似的东西

bar = new_kind_of_thing(( 1, 9, (12.5, "floob"), "baz" ))
print(bar[2])
print(bar[0])
print(bar.__name__)

输出:

(12.5, 'floob')
1
'bar'

4 个答案:

答案 0 :(得分:5)

只需创建一个继承自元组的新类并覆盖__new____init__方法:

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__)

输出:

(1, 2, 3)
'foo'

答案 1 :(得分:1)

那么简单的事情如何呢?

class TupleWithName(tuple):
    pass

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

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

print(t.name)
# 'tuple one'

答案 2 :(得分:0)

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

class AccueilController extends Controller {
    public function affichePage() {
        $agenda = Agenda::all()->take(3)->sortBy('date');
        return view('Accueil.Page',compact('slides','agenda'));
    }
}

答案 3 :(得分:0)

是的,您可以通过“映射”来执行此操作-创建具有其他属性的自定义类。

资源:http://www.kr41.net/2016/03-23-dont_inherit_python_builtin_dict_type.html

海事组织,我认为这不是你想要的。

使用更复杂的数据结构(例如元组字典)可能会更好。

my_tuples = {}
my_tuples["tuple1"] = (1, 2, 3)
my_tuples["tuple2"] = (4, 5, 6)

或(注释结构)

print(my_tuples["tuple1"])
(1,2,3)

这将允许您通过“名称”与元组进行交互

shrinkWrap