是否有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'
答案 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