如何在python中将"namedtuples"更改为类?

juj*_*uju 2 python

谁能举个例子?

在类和namedtuples中使用变量有什么区别?

Jje*_*jed 8

返回值namedtuple 一个类.没有黑魔法.您不需要将namedtuple返回"转换"为类; 它恰好返回了.

namedtuple创建一个继承自的新类__builtin__.tuple.当你打电话时namedtuple('Point', 'x y')(1, 0),你得到的是(1, 0)具有以下语法糖的元组对象:

  • 一个__dict__映射在哪里{'x': 1, 'y', 0}
  • 两个属性xy该呼叫__getitem__(0)__getitem__(1)分别.
  • __repr__返回的方法'Point(x=1, y=0)'

除此之外,它只是一个元组对象.它的属性和属性数是不可变的.

但是,我怀疑你的意思是你想要采取nametuple('Point', 'x, y'),而是得到:

class Point:
    def __init__(x, y):
        self.x = x
        self.y = y
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您滥用nametuple,应该使用type:

def init(self, x, y):
    self.x, self.y = x, y
Point = type('Point', (object,), {'__init__': init})
Run Code Online (Sandbox Code Playgroud)